C#的数据类型总结:decimal ,double,float的区别
原文链接:https://www.cnblogs.com/mrbug/p/6904039.html
double虽然64位,但其精度低,故其可以表示的范围大
decimal虽然是128位,但由于其用了较多的位来表示其精度,只好牺牲表示范围了.
1> 三者是精度不同的浮点数,如下图
参见:https://docs.microsoft.com/zh-cn/dotnet/articles/csharp/language-reference/keywords/float
2> 写法
默认情况下,赋值运算符右侧的实数被视为 double。 但是,如果希望整数被视为 double,可使用后缀 d 或 D,例如:
1
|
double d = 3D; |
若要初始化浮点型变量,请使用后缀 f
或 F
,如以下示例中所示:
1
|
float f = 17.5F; |
如果希望实数被视为 decimal 类型,请使用后缀 m 或 M,例如:
1
|
decimal m = 17.5m; |
3>关于它们的错误认识
在精确计算中使用浮点数是非常危险的,尽管C#在浮点数运算时采取了很多措施使得浮点数运算的结果看起来是非常正常的。但实际上如果不清楚浮点数的特性而贸然使用的话,将造成非常严重的隐患。
1、decimal不是浮点型、decimal不存在精度损失。
下面有段程序大家可以去看看结果是什么。记住!所有的浮点型变量都存在精度损失的问题,而decimal是一个不折不扣的浮点型,不论它精度有多高,精度损失依然存在!
1
2
3
|
decimal dd = 10000000000000000000000000000m; dd += 0.1m; Console.WriteLine ( "{0:G50}" , dd ); |
2、decimal所能储存的数比double大,从double到decimal的类型转换不会出现任何问题。
实际上只有从整形到decimal的转换才是扩大转换,decimal的精度比double大,但所能储存的最大数却比double要小。decimal类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了