考虑一下:
double x,y;
x =120.0;
y = 0.05;
double z= x % y;
我尝试了这个,预计结果是 0,但结果是 0.04933333。
However,
x =120.0;
y = 0.5;
double z= x % y;
确实给出了正确的结果0。
这里发生了什么?
I tried Math.IEEERemainder(double, double)
但它也不返回 0。这里发生了什么?
另外,顺便说一句,在 C# 中查找余数的最合适方法是什么?
由于其存储格式,double
s 无法准确存储输入或显示的每个值。人类对数字的表示通常采用十进制格式,而double
s基于双系统。
In a double
, 120
之所以被精确存储,是因为它是一个整数值。但0.05
不是。 double 近似于最接近的数字0.05
它可以代表。0.5
是一个幂2
(1/2
),因此可以精确存储并且不会出现舍入错误。
要使所有数字与您在十进制系统中输入/显示的方式完全相同,请使用decimal
反而。
decimal x, y;
x = 120.0M;
y = 0.05M;
decimal z = x % y; // z is 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)