我知道计算机中有一个数学问题会导致意外的输出:
using static System.Console;
var a = .1;
var b = .2;
WriteLine(a + b);
// output: 0.30000000000000004
但是当我在其他一些电脑(例如 w3schools 在线 C# 编译器)中运行此代码时,我得到了
.3
作为答案,这对我来说似乎很奇怪。
为什么会发生这样的事?
由于计算机中浮点数的表示和处理方式,此结果可能看起来出乎意料。
浮点数以二进制形式表示,并不是所有的十进制数都可以用二进制精确表示。在对浮点数执行算术运算时,这可能会导致较小的舍入误差。
将 a 和 b 加在一起时,由于浮点运算固有的不精确性,结果并不精确为 0.3。相反,它是一个非常接近的近似值。