gpt4 book ai didi

c# - 为什么这个简单的双重断言在 C# 中失败

转载 作者:行者123 更新时间:2023-11-30 13:58:07 28 4
gpt4 key购买 nike

以下测试将在 C# 中失败

Assert.AreEqual<double>(10.0d, 16.1d - 6.1d);

问题似乎是浮点错误。

16.1d - 6.1d == 10.000000000000002

这让我在为使用 double 的代码编写单元测试时感到头疼。有办法解决这个问题吗?

最佳答案

在十进制系统和 double 的二进制表示之间没有精确的转换(请参阅下面@PatriciaShanahan 的精彩评论,了解原因)。

在这种情况下,数字的 .1 部分是问题所在,它不能用 double 有限地表示(例如 1/3 不能精确地有限地表示为十进制数)。

解释发生了什么的代码片段:

double larger = 16.1d; //Assign closest double representation of 16.1.
double smaller = 6.1; //Assign closest double representation of 6.1.
double diff = larger - smaller; //Assign closest diff between larger and
//smaller, but since a smaller value has a
//larger precision the result will have better
//precision than larger but worse than smaller.
//The difference shows up as the ...000002.

始终使用 Assert.Equal overload比较 double 时采用 delta 参数。

或者,如果您确实需要精确的十进制转换,请使用 decimal 数据类型,该数据类型具有另一种二进制表示形式,并且在您的示例中将准确返回 10

关于c# - 为什么这个简单的双重断言在 C# 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18300743/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com