使用CType与VB.net单一返回额外的数字

Dav*_*ins 5 vb.net

我正在使用VB.NET 2010.我遇到了一个问题,起初我认为是数据库问题,因为值是从DB2表中提取的.但是,它似乎是在.NET本身.我通过运行以下两行代码来确定这一点:

    Dim sAmount As Single
    sAmount = CType("212639.04", Single)
Run Code Online (Sandbox Code Playgroud)

当我查看sAmount时,值为212639.047.

我的问题:7来自哪里?

tin*_*afl 2

问题是您使用的是 Single,它是一种浮点数据类型,它不适用于非二进制分数的分数。

浮点表达式比较时不相等

使用浮点数(单数据类型 (Visual Basic) 和双数据类型 (Visual Basic))时,请记住它们存储为二进制分数。这意味着它们无法精确表示非二进制分数的任何数量(形式为 k / (2 ^ n),其中 k 和 n 是整数)。例如,0.5 (= 1/2) 和 0.3125 (= 5/16) 可以保留为精确值,而 0.2 (= 1/5) 和 0.3 (= 3/10) 只能是近似值。

由于这种不精确性,您在处理浮点值时不能依赖精确的结果。特别是,理论上相等的两个值可能具有稍微不同的表示形式。

比较浮点量

Calculate the absolute value of their difference by using the Abs method of the 
Math class in the System namespace.

Determine an acceptable maximum difference, such that you can consider the two 
quantities to be equal for practical purposes if their difference is no larger.

Compare the absolute value of the difference to the acceptable difference.
Run Code Online (Sandbox Code Playgroud)

或者 double 将返回精度更高的数字。