双数据类型不适合我的数据/计算吗?

Mic*_*hel 0 c# types

我的单元测试因此而失败,所以我想知道我是否使用了正确的数据类型?

阅读双重的规格,我认为应该没问题,但这就是发生的事情:

我正在从一个带有值的文件中读取一个字符串0,0175(逗号为十进制sep.)

然后我将它转换为double然后乘以10000.

执行乘法的函数是:

private static double? MultiplyBy10000(double? input)
        {
            if (!input.HasValue)
            {
                return null;
            }
            return input.Value*10000;
        }
Run Code Online (Sandbox Code Playgroud)

接下来是来自眼前的窗口:

input.Value
0.0175
input.Value*10000
175.00000000000003
Run Code Online (Sandbox Code Playgroud)

这就是我的单元测试失败的原因,因为我期望175.

双重不够准确吗?

检查其他值:

input.Value*1
0.0175
input.Value*10
0.17500000000000002
input.Value*100
1.7500000000000002
input.Value*1000
17.5
input.Value*10000
175.00000000000003
Run Code Online (Sandbox Code Playgroud)

奇怪的是,我有12个测试用例0,0155 0,0225 0,016 0,0175 0,0095 0,016 0,016 0,0225 0,0235 0,0265

并断言其中4个,其他3个没有这种行为

Pat*_*man 5

双重不够准确吗?

不,双打是浮点数,设计不准确.decimal如果您需要确切的数字,您可以使用哪种准确且更合适.