考虑一下:
double x,y;
x =120.0;
y = 0.05;
double z= x % y;
Run Code Online (Sandbox Code Playgroud)
我试过这个,并期望结果为0,但它出来了0.04933333.
然而,
x =120.0;
y = 0.5;
double z= x % y;
Run Code Online (Sandbox Code Playgroud)
确实给出了0的正确结果.
这里发生了什么?
我试过Math.IEEERemainder(double, double)但它也没有返回0.这里发生了什么?
另外,另外,在C#中找到余数最合适的方法是什么?
Ste*_*ger 15
由于其存储格式,doubles无法完全按照输入或显示的方式存储每个值.数字的人类表示通常是十进制格式,而doubles基于双系统.
在a中double,120精确存储是因为它是一个整数值.但0.05事实并非如此.双精度近似于0.05它可以表示的最接近的数字.0.5是2(1/2)的幂,所以它可以精确存储,你不会得到舍入误差.
要使所有数字与在十进制系统中输入/显示它的方式完全相同,请decimal改用.
decimal x, y;
x = 120.0M;
y = 0.05M;
decimal z = x % y; // z is 0
Run Code Online (Sandbox Code Playgroud)
Kev*_*ngs 10
你可以这样做:
double a, b, r;
a = 120;
b = .05;
r = a - Math.floor(a / b) * b;
Run Code Online (Sandbox Code Playgroud)
这应该有帮助;)
| 归档时间: |
|
| 查看次数: |
21057 次 |
| 最近记录: |