减去两个浮点数的结果 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#?
浮点数通常是一个近似值。关于如何在计算机中以负责任的方式使用浮点数,有一个完整的研究领域,相信我,这不是微不足道的!
大多数程序员所做的就是接受它并确保他们的代码 'robust' 与您使用浮点数所获得的小偏差相对。
错误:
if (my_float== -0.01)
右:
if (my_float>= -0.00999 && my_float<=-0.01001)
(数字仅供参考)
如果您需要确切的数字,例如使用整数。您可以使用舍入,但这不是在计算中途完成的,因为您可能会使结果更加不可靠。四舍五入通常是在打印最终结果时进行的。毕竟作为一个好的工程师,你应该知道最后有多少数字是相关的。
考虑像 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#?
浮点数通常是一个近似值。关于如何在计算机中以负责任的方式使用浮点数,有一个完整的研究领域,相信我,这不是微不足道的!
大多数程序员所做的就是接受它并确保他们的代码 'robust' 与您使用浮点数所获得的小偏差相对。
错误:
if (my_float== -0.01)
右:
if (my_float>= -0.00999 && my_float<=-0.01001)
(数字仅供参考)
如果您需要确切的数字,例如使用整数。您可以使用舍入,但这不是在计算中途完成的,因为您可能会使结果更加不可靠。四舍五入通常是在打印最终结果时进行的。毕竟作为一个好的工程师,你应该知道最后有多少数字是相关的。