谁给说说decimal,double,single的区别,在什么时候用它们是最合适的?

crazystudio 2005-05-14 08:27:33
如上!
...全文
6117 20 打赏 收藏 转发到动态 举报
写回复
用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位高精度浮点数,常用于金融运算,不会出现浮点数计算的误差

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧