VB.NET 单一数据类型计算问题

Alb*_*ing 3 vb.net vb.net-2010

我想使用 vb.net 用小数执行基本计算。

Dim a As Single= 7200.5
Dim b As Single= 7150.3
Dim c As Single= a - b

'Expected result = 50.2
MsgBox(a.ToString + " - " + b.ToString + " = " + c.ToString.Trim)
'Produced result is: 50.2002

Dim single1 As Single
Dim single2 As Single
Dim single3 As Single

single1 = 425000
single2 = 352922.2
single3 = single1 - single2

'Expected result is: 72077.8
MsgBox(single3.ToString)
'Produced result is: 72077.81
Run Code Online (Sandbox Code Playgroud)

这么简单的计算,结果怎么会这么不准确呢?当我将数据类型更改为 时,问题解决了Decimal,但Decimal对象消耗了更多内存(16 字节)。是否有任何替代数据类型可用于执行具有准确结果的简单分数计算?

Sea*_*rey 5

这与浮点数在内存中的存储方式有关,.Net 中的 Single 是单精度浮点数,其精度远不如 Decimal 或 Double 来存储十进制数。

当计算机计算您的数字时,它只能使用二进制分数,并且在单精度浮点数中,它们不是很准确。

有关更多信息,请参阅http://en.wikipedia.org/wiki/Single-precision_floating-point_format

编辑:这里有一些特定于 VB.Net 的更多信息:http : //msdn.microsoft.com/en-us/library/ae382yt8( v=vs.110) .aspx