首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#哪种数据类型是精度3的最佳数据类型?

C#哪种数据类型是精度3的最佳数据类型?
EN

Stack Overflow用户
提问于 2009-09-04 18:39:30
回答 12查看 5.8K关注 0票数 5

我想用下面的0.000存储一个数字,它是最好使用的数据类型。

双人份?

另外,我猜INT是不可能的?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2009-09-04 18:47:20

decimal类型是最适合定点数学运算的。

来自C#规范第4.1.7节:

与float和double数据类型相反,小数小数(如0.1 )可以用decimal表示法精确表示。在浮点数和双精度表示法中,这样的数字通常是无限小数,这使得这些表示法更容易出现舍入错误。

票数 27
EN

Stack Overflow用户

发布于 2009-09-04 18:46:58

我仍然是一个十进制的粉丝,它可能会占用更多的空间,但没有浮点数和双精度的舍入误差。

这真的取决于你需要什么样的精确度和准确度,以及你希望存储的数字的类型。

例如,如果您使用的是货币,那么float或real中的舍入误差可能无论如何都是不可接受的。

当然,如果它是完全固定的,根据所需的值范围,您可以只需乘以1000并存储为整数类型,如short。

http://www.yoda.arachsys.com/csharp/floatingpoint.html中的舍入误差示例

代码语言:javascript
复制
double a = 0.65d;  
double b = 0.05d;  
Console.WriteLine("{0:r}", a + b);  

请注意,在打印时{0:r}很重要,否则.net将舍入该值,并将其显示为0.7,即使它不完全是0.7。

经过几次计算,这样的舍入误差可能会增加。

票数 6
EN

Stack Overflow用户

发布于 2009-09-04 18:56:01

如果您正在处理小数,并且您的规范要求N位小数的精确精度,那么您唯一的选择是decimal,或者具有手动缩放的int/long (即,在进行输入/输出和算术时,根据需要乘以和除以1000 )。后者速度更快,表示更紧凑,前者更慢,更宽,但代码更短,更清晰。当然,您也可以将所有定点样板代码封装在您自己的struct中,它在幕后使用int/long

请勿使用floatdouble。它们不能精确地表示许多小数。如果你总是四舍五入,你可以逃脱惩罚,但一旦你开始做算术或比较,这可能(通常会)绊倒你,因为舍入误差会累积。

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

https://stackoverflow.com/questions/1380871

复制
相关文章

相似问题

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