Float 到 Double 的转换给出了不正确的值
Posted
技术标签:
【中文标题】Float 到 Double 的转换给出了不正确的值【英文标题】:Conversion of Float to Double gives incorrect value 【发布时间】:2015-03-17 11:38:21 【问题描述】:我有一个捐款网页,人们可以在其中指定他们捐款的百分比用于哪个慈善机构。我已经进行了验证,以确保他们不能分配超过 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%,但当我调试我的页面时,我看到 percentAllocated 的值为 33.400000000000006%。
这显然会影响我的验证。
谁能建议我如何阻止这种不正确的转换?
提前致谢。
【问题讨论】:
为什么首先在数据库中使用浮点数?见:***.com/questions/1056323/… 【参考方案1】:Floating point values are intrinsically susceptible to rounding errors。使用不存在此问题的小数:
Dim percentageAllocated As Decimal = myReader.GetDecimal(myReader.GetOrdinal("totalPercentage"))
【讨论】:
以上是关于Float 到 Double 的转换给出了不正确的值的主要内容,如果未能解决你的问题,请参考以下文章
为啥 int 被提升为 double 而不是 float 以进行隐式转换
SYCL/DPC++ cpu 版本给出了正确的结果,但 gpu 给出了不正确的数据
java 变量数据类型转换?byte, short, char, int, long, float, double