[英]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.