C#几行代码,大家猜一下运行结果

static void Main()
{
Console.WriteLine((int)(0.01f * 100));
float num1 = 0.01f;
Console.WriteLine((int)(num1 * 100));
float num2 = 0.01f * 100;
Console.WriteLine((int)num2);
Console.ReadKey();
}

浮点数存在误差,结果可能会是一个近似的值。
0.01表面上看10进制是一个有限小数,但是2进制不是
它是 0.000000101000111101011100001010001111010111000010100011110……
无限循环的。
所以要看精度了。
然而不同的机器环境,运算精度误差都不同。比如说一个计算机支持x87 fpu,它的精度和一个计算机支持isse2的精度,或者avx2的精度,都不一样。
这导致结果误差究竟是多少,是因机器而异的。

图片说明

如果结果是0.99999999999999999,取整就是0
如果是1.00000000000000001,取整就是1