减去两个浮点数的结果 C#

Result of Subtraction Two Float number C#

考虑像 1 和 0.99 这样的两个数字,我想在 C# 中将这些数字子化

float s = 0.99f - 1f;
Console.WriteLine(s.toString());
result is : -0.0099999

我该怎么做才能使结果等于 -0.01?

试试这个;

decimal d = 0.99m - 1m;
Console.WriteLine(Math.Round(d, 2));

计算机无法完美地表示小数。他们只能近似它们,这就是为什么您看到 -0.0099999 而不是预期的 -0.01。

对于任何需要近似值的情况,您通常会使用任意精度类型并在适当的情况下进行舍入。最常见的货币四舍五入是银行家四舍五入,因为它不会在任何方向上严重扭曲结果。

另请参阅:

What is the best data type to use for money in c#?

http://wiki.c2.com/?BankersRounding

浮点数通常是一个近似值。关于如何在计算机中以负责任的方式使用浮点数,有一个完整的研究领域,相信我,这不是微不足道的!
大多数程序员所做的就是接受它并确保他们的代码 'robust' 与您使用浮点数所获得的小偏差相对。
错误:

if (my_float== -0.01)


右:

if (my_float>= -0.00999 && my_float<=-0.01001)

(数字仅供参考)

如果您需要确切的数字,例如使用整数。您可以使用舍入,但这不是在计算中途完成的,因为您可能会使结果更加不可靠。四舍五入通常是在打印最终结果时进行的。毕竟作为一个好的工程师,你应该知道最后有多少数字是相关的。