【发布时间】:2011-02-18 17:46:39
【问题描述】:
我们使用小数数据类型将财务数据存储在 SQL Server 数据库中,并且我们需要 6-8 位的小数精度。当我们通过数据访问层将该值返回到 C# 服务器时,它会以十进制数据类型返回。
由于一些我无法控制的设计限制,这需要转换。转换为字符串不是问题。正如 MS 文档所说,转换为双精度数“[从十进制转换为双精度] 会产生舍入错误,因为双精度浮点数的有效数字少于小数。”
作为双精度数(或字符串),我们可以在任何计算完成后四舍五入到小数点后两位,那么进行小数转换以确保在四舍五入之前不会丢失任何精度的“正确”方法是什么?
【问题讨论】:
-
根据 MSDN,decimal 的精度为 28-29 位,double 的精度为 15-16。但是,如果您只存储 6-8 位数字,那么我认为四舍五入不会影响您。这可以很容易地通过单元测试来查看。
标签: c#