在 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
allows you to specify a MidpointRounding:ToEven - When a number is halfway between two others, it is rounded toward the nearest even number.
AwayFromZero - When a number is halfway between two others, it is rounded toward the nearest number that is away from zero.
示例:
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 步后结束。
关于java - 十进制负数和正数之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28626944/