繁体   English   中英

小数负数和正数之和

[英]Decimal negative and positive numbers sum

在Java和C#中:

int a = (int)(-1.5 + 2.5);
int b = (int)(-1.55 + 2.55);
int c = (int)(1.45 + 2.55);
// a = 1; b = 0; c = 4;

谁能解释为什么小数点后在带有2个或更多数字的负数上加上正数会导致十进制数中断? “ b = 0.99999999999999978”。

所以问题是-为什么“ -1.5 + 2.5 = 1”,而“ -1.55 + 2.55 = 0”?

这是因为double类型是一个近似值。

通常, double表示IEEE 754标准类型的decimal64


Math.Round允许您指定MidpointRounding

ToEven-当一个数字位于两个其他数字之间时,将四舍五入到最接近的偶数。

AwayFromZero-一个数字在两个之间的一半时,将四舍五入为最接近零的数字。

例:

var val = (int)Math.Round((-1.55 + 2.55), 1, MidpointRounding.ToEven);
Console.WriteLine(val);

输出1


初学者的常见错误是编写如下代码:

for (double i = 0.0; i == 6.0; i+=0.1)
{
    Console.WriteLine(i);
}

提示:这不会以〜60步结束。

使用double时,IEEE-754格式的某些小数不能正确表示。 而是使用BigDecimal。 例如:

BigDecimal result = new BigDecimal("-1.55").add(new BigDecimal("2.55"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM