社区
C#
帖子详情
谁给说说decimal,double,single的区别,在什么时候用它们是最合适的?
crazystudio
2005-05-14 08:27:33
如上!
...全文
6344
20
打赏
收藏
谁给说说decimal,double,single的区别,在什么时候用它们是最合适的?
如上!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Ivony
2005-05-15
打赏
举报
回复
再精确计算中使用浮点数是非常危险的,尽管C#在浮点数运算时采取了很多措施使得浮点数运算的结果看起来是非常正常的。但实际上如果不清楚浮点数的特性而贸然使用的话,将造成非常严重的隐患。
考虑下面的语句:
double dd = 10000000000000000000000d;
dd += 1;
Console.WriteLine ( "{0:G50}", dd );
输出是什么?谁知道?
输出是:1000000000000000000000000
这就是浮点数精度损失的问题,最重要的是,在精度损失的时候,不会报告任何的错误,也不会有任何的异常产生。
浮点数的精度损失可能在很多地方出现,例如d * g / g 不一定等于d,d / g * g也不一定等于d。
还有两个非常危险的错误认识!!
1、decimal不是浮点型、decimal不存在精度损失。
下面有段程序大家可以去看看结果是什么。记住!所有的浮点型变量都存在精度损失的问题,而decimal是一个不折不扣的浮点型,不论它精度有多高,精度损失依然存在!
decimal dd = 10000000000000000000000000000m;
dd += 0.1m;
Console.WriteLine ( "{0:G50}", dd );
2、decimal所能储存的数比double大,从double到decimal的类型转换不会出现任何问题。
微软在decimal的帮助上真的要好好反省了。实际上只有从整形到decimal的转换才是扩大转换,decimal的精度比double大,但所能储存的最大数却比double要小。
凨叔
2005-05-15
打赏
举报
回复
晕,是我没学好……
fanruinet
2005-05-15
打赏
举报
回复
汗,正好少说了一半
应该decimal占16个字节,double-8个字节,single-4个字节
fanruinet
2005-05-15
打赏
举报
回复
to sunjian_qi(sonne):
速马没有说错,他说的大小是存储的大小,decimal占8个字节,double-4个字节,single2个字节
凨叔
2005-05-15
打赏
举报
回复
显示有问题我写的是负号,变成了−,用了Server.HtmlEncode???
凨叔
2005-05-15
打赏
举报
回复
纠正速马老大一个错误,应该是decimal的精度是double的两倍,float(single)的四倍吧。:)
就大小而言,decimal还不及float吧
类型 大致范围 精度
----------------------------------------------------------------
float ±1.5 × 10^(−45) 到 ±3.4 × 10^38 7 位
double ±5.0 × 10^(−324) 到 ±1.7 × 10^308 15 到 16 位
decimal ±1.0 × 10^(−28) 到 ±7.9 × 10^28 28 到 29 位有效位
凨叔
2005-05-15
打赏
举报
回复
纠正速马老大一个错误,应该是decimal的精度是double的两倍,float(single)的四倍吧。:)
就大小而言,decimal还不及float吧
类型 大致范围 精度
----------------------------------------------------------------
float ±1.5 × 10^−45 到 ±3.4 × 10^38 7 位
double ±5.0 × 10^−324 到 ±1.7 × 10^308 15 到 16 位
decimal ±1.0 × 10^−28 到 ±7.9 × 10^28 28 到 29 位有效位
coolsunwind
2005-05-14
打赏
举报
回复
学习!
zeusvenus
2005-05-14
打赏
举报
回复
还应该注意三者带来的系统开销相差比较大。
速马
2005-05-14
打赏
举报
回复
decimal的大小是double的两倍,float(single)的四倍
decimal的精度是可变的,其他两个不是
double和float是primitive类型,decimal不是
silentwins
2005-05-14
打赏
举报
回复
最主要是看情况和你估计数字的精度啦
精度超高当然double啦,连一点性能都要榨取的话,那就....
一般都用decimal,用于一般生活的都有足够的精度和方便
jedliu
2005-05-14
打赏
举报
回复
decimal由于更精确,所以一般用于财务和货币计算,并且在数据库里也有它,这样统一起来比较比double好。double适合一般的计算,比如统计成绩什么的。single本人用的比较少,所以没什么好的经验给你
凨叔
2005-05-14
打赏
举报
回复
不客气
新鲜鱼排
2005-05-14
打赏
举报
回复
上网搜索一下就都有了。
fanruinet
2005-05-14
打赏
举报
回复
不客气
crazystudio
2005-05-14
打赏
举报
回复
好,谢谢 fancyf(Fancyray) sunjian_qi(sonne) !
fanruinet
2005-05-14
打赏
举报
回复
任何需要浮点数的场合
精度要求不高就用single,反之double
crazystudio
2005-05-14
打赏
举报
回复
哪double和single主要用于什么场合?
凨叔
2005-05-14
打赏
举报
回复
decimal 表示 128 位数据类型。同浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。
fanruinet
2005-05-14
打赏
举报
回复
double是64位的,比single-32位精度高
decimal128位高精度浮点数,常用于金融运算,不会出现浮点数计算的误差
c#基础课程学习课件
对于浮点数,float(System.
Single
)提供7位精度,
double
(System.
Double
)提供15-16位精度,
decimal
(System.
Decimal
)则用于需要更高精度的财务计算。 4. 实数类型的转换和运算:在C#中,可以使用后缀(如m或M)...
VB和c#语法对照 (2).docx
对于浮点数,VB.NET使用`
Single
`和`
Double
`,C#则使用`float`和`
double
`;VB.NET的`
Decimal
`对应C#的`
decimal
`。在进行类型转换时,C#通常需要显式转换,而VB.NET可以自动转换,但也可以使用`CType`函数。 最后,...
计算机软件及应用章PPT课件.pptx
在VB 2005中,声明变量时可以使用相应的数据类型关键字,例如Integer用%标识,Long用&标识,
Decimal
用@标识,
Single
用!标识,
Double
用#标识。此外,String类型的默认值是空字符串,而数值类型的默认值为0。 了解并...
Sql与AspNet数据类型对应[总结].pdf
7. Float和
Double
:在SQL中,Float代表单精度浮点数,对应于.NET的
Single
类型,而
Double
是双精度浮点数,对应于.NET的
Double
类型。它们分别能存储-3.40E +38 到 3.40E +38 和-1.79E +308 到 1.79E +308范围内的数值...
vb.net 数据类型
VB.NET 是一种面向对象的编程语言,其数据类型是编程的基础,用于定义变量的存储和行为。本篇文章将深入探讨VB...无论是基础类型还是自定义类型,都需要根据实际应用选择
最合适
的类型,以实现最佳性能和代码可读性。
C#
111,077
社区成员
642,570
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章