我们使用decimal数据类型将财务数据存储在SQL Server数据库中,我们需要6-8位的小数精度。当我们通过数据访问层将这个值返回到C#服务器时,它将作为decimal数据类型返回。
由于一些设计约束超出了我的控制范围,因此需要进行转换。转换为字符串不是问题。正如MS文档所说的那样,转换为双精度是“从小数转换为双精度会产生舍入错误,因为双精度浮点数的有效位数少于小数”。
作为双精度(或字符串),我们可以在任何计算完成后四舍五入到两位小数,那么什么是“正确”的方式来进行小数转换,以确保我们在舍入之前不会损失任何精度?
发布于 2011-02-19 01:51:01
转换不会在前8位内产生错误。double的精度为15-16位,低于decimal的28-29位,但听起来足以满足您的需要。
您绝对应该制定某种计划,以避免将来使用double -它不适合用于财务计算的数据类型。
发布于 2011-02-19 01:51:57
如果你舍入到2dp,那么“正确”的方式将是存储一个整数的倍数--即对于12.34,你存储的是整数1234。不再有双舍五入的悲哀。
如果您必须使用双精度,这仍然有效;所有的整数都被保证准确地存储在中-所以仍然使用相同的技巧。
https://stackoverflow.com/questions/5044707
复制相似问题