Float 到 Double 的转换给出了错误的值

Conversion of Float to Double gives incorrect value

我有一个捐赠网页,人们可以在其中指定捐赠的百分比用于慈善机构。我有适当的验证以确保他们不能分配超过 100%。这工作正常,直到人们添加小数值。

百分比作为浮点数存储在 SQL 数据库中,我使用以下存储过程引入可分配的总百分比。

SELECT giftid, SUM(percentage) totalPercentage 
FROM dbo.giftFundArea
WHERE giftid = @giftid
GROUP BY giftid

我的页面查看存储过程并使用以下代码访问该值。

Dim percentageAllocated As Double = myReader.GetDouble(myReader.GetOrdinal("totalPercentage"))

当我在 Managememt Studio 中 运行 存储过程时,我看到分配给特定礼物的总百分比是 33.4%,但是当我调试我的页面时,我看到 percentageAllocated 的值为 33.400000000000006%。

这显然是在推翻我的验证。

谁能建议我如何停止这种不正确的转换?

提前致谢。

Floating point values are intrinsically susceptible to rounding errors。使用没有此问题的小数代替:

Dim percentageAllocated As Decimal = myReader.GetDecimal(myReader.GetOrdinal("totalPercentage"))