减法结果两个浮点数C#

时间:2017-12-02 11:05:46

标签: numbers subtraction

考虑两个数字,如1和0.99,我想在C#

中提取这些数字
float s = 0.99f - 1f;
Console.WriteLine(s.toString());
result is : -0.0099999

我能做什么结果等于-0.01?

2 个答案:

答案 0 :(得分:1)

试试这个;

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

答案 1 :(得分:1)

浮点数通常是近似值。关于如何在计算机中以负责任的方式使用浮动数字有一整个研究领域,相信我,这不是一件轻而易举的事。
大多数程序员所做的就是使用它并确保他们的代码对于使用浮点数的小偏差是“健壮的”。
错了:

if (my_float== -0.01)

正确:

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

(数字就是例子)。

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

相关问题