c#-Math.Truncate(num)问题
作者:互联网
正如问题所暗示的(更多声明令人遗憾),我在C#中使用math.truncate遇到问题.我想做的是说当一个数字的小数除以50等于0.4时,这样做:
double temp2 = 170;
temp2 = temp2 / 50; //this equals 3.4
temp2 -= Math.Truncate(temp2);
if (temp2 == 0.4)
{
Console.WriteLine("Hello");
}
但是,当我尝试执行此操作时,它对我不起作用,并且不确定为什么它不起作用,请问我是否可以让某人对此有所了解并朝正确的方向发展?
解决方法:
single和double是二进制浮点类型.这意味着它们不能精确表示许多十进制值(例如0.4).这会导致微妙的舍入误差,因此比较两个逻辑上应该表示相同值的双精度值可能会导致意外结果.
可以使用DoubleToInt64Bits
方法进行经验验证:
BitConverter.DoubleToInt64Bits(temp2); // 4600877379321698712
BitConverter.DoubleToInt64Bits(0.4); // 4600877379321698714
将其更改为十进制,您将获得预期的结果:
decimal temp2 = 170;
temp2 = temp2 / 50; //this equals 3.4
temp2 -= Math.Truncate(temp2);
if (temp2 == 0.4m) // the m creates a decimal constant
{
Console.WriteLine("Hello");
}
标签:floating-point,double,c,net 来源: https://codeday.me/bug/20191030/1968026.html