如何在c#中使100.02f - 100 == 0.02f为真?

YMC*_*YMC 0 .net c# floating-point rounding

这似乎是四舍五入的问题.我有float []数组和这个数组的一些操作.我需要为此功能编写单元测试,但是将预期值与结果值进行比较恰好不是考虑到这种舍入问题的简单任务.有没有办法在我的阵列上测试数学运算?谢谢

Bol*_*ock 6

舍入问题是浮点计算的固有部分.decimal[]或许使用小数()数组?

100.02m - 100
Run Code Online (Sandbox Code Playgroud)

  • @YMC,如果内存是你遇到的实际问题,那么这是一个有效的问题.另一方面,如果精确定位十进制精度是你的问题,那么使用更好的工具.例如,如果这些是财务价值,那么您使用的是错误的. (4认同)
  • 不要担心内存问题. (2认同)

Ant*_*ram 5

在单元测试中使用浮点数或双精度数时,您的测试框架可能允许您考虑可接受的增量.例如,您可以使用NUnit编写

double expected = 1d;
double delta = 0.0001d;
double actual = classUnderTest.Method();
Assert.AreEqual(expected, actual, delta);
Run Code Online (Sandbox Code Playgroud)

理解浮游和双打对某些事物本质上是不精确的,这是设计的.它们代表基数2中的数字.如果您需要准确的基数10表示,请使用适当的类型:decimal.