首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在c#中安全地将双精度数转换为小数

如何在c#中安全地将双精度数转换为小数
EN

Stack Overflow用户
提问于 2011-02-19 01:46:40
回答 2查看 3.9K关注 0票数 5

我们使用decimal数据类型将财务数据存储在SQL Server数据库中,我们需要6-8位的小数精度。当我们通过数据访问层将这个值返回到C#服务器时,它将作为decimal数据类型返回。

由于一些设计约束超出了我的控制范围,因此需要进行转换。转换为字符串不是问题。正如MS文档所说的那样,转换为双精度是“从小数转换为双精度会产生舍入错误,因为双精度浮点数的有效位数少于小数”。

作为双精度(或字符串),我们可以在任何计算完成后四舍五入到两位小数,那么什么是“正确”的方式来进行小数转换,以确保我们在舍入之前不会损失任何精度?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-19 01:51:01

转换不会在前8位内产生错误。double的精度为15-16位,低于decimal的28-29位,但听起来足以满足您的需要。

您绝对应该制定某种计划,以避免将来使用double -它不适合用于财务计算的数据类型。

票数 13
EN

Stack Overflow用户

发布于 2011-02-19 01:51:57

如果你舍入到2dp,那么“正确”的方式将是存储一个整数的倍数--即对于12.34,你存储的是整数1234。不再有双舍五入的悲哀。

如果您必须使用双精度,这仍然有效;所有的整数都被保证准确地存储在中-所以仍然使用相同的技巧。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5044707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档