谁给说说decimal,double,single的区别,在什么时候用它们是最合适的?
如上! 问题点数:0、回复次数:20Top
1 楼fancyf(凡瑞)回复于 2005-05-14 20:31:12 得分 0
double是64位的,比single-32位精度高
decimal128位高精度浮点数,常用于金融运算,不会出现浮点数计算的误差Top
2 楼sunjian_qi(sonne)回复于 2005-05-14 20:33:10 得分 0
decimal 表示 128 位数据类型。同浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。Top
3 楼crazystudio(待从头,收拾旧山河)回复于 2005-05-14 20:36:14 得分 0
哪double和single主要用于什么场合?Top
4 楼fancyf(凡瑞)回复于 2005-05-14 20:39:17 得分 0
任何需要浮点数的场合
精度要求不高就用single,反之doubleTop
5 楼crazystudio(待从头,收拾旧山河)回复于 2005-05-14 20:40:54 得分 0
好,谢谢 fancyf(Fancyray) sunjian_qi(sonne) !Top
6 楼fancyf(凡瑞)回复于 2005-05-14 20:41:30 得分 0
不客气Top
7 楼dutguoyi(新鲜鱼排)回复于 2005-05-14 20:44:18 得分 0
上网搜索一下就都有了。Top
8 楼sunjian_qi(sonne)回复于 2005-05-14 20:47:27 得分 0
不客气Top
9 楼jedliu(21世纪什么最贵? 人才!)回复于 2005-05-14 20:51:09 得分 0
decimal由于更精确,所以一般用于财务和货币计算,并且在数据库里也有它,这样统一起来比较比double好。double适合一般的计算,比如统计成绩什么的。single本人用的比较少,所以没什么好的经验给你Top
10 楼silentwins(原谅我当天不懂得珍惜只知任性...)回复于 2005-05-14 20:59:58 得分 0
最主要是看情况和你估计数字的精度啦
精度超高当然double啦,连一点性能都要榨取的话,那就....
一般都用decimal,用于一般生活的都有足够的精度和方便Top
11 楼Sunmast(速马@Redmond, WA)回复于 2005-05-14 21:28:25 得分 0
decimal的大小是double的两倍,float(single)的四倍
decimal的精度是可变的,其他两个不是
double和float是primitive类型,decimal不是Top
12 楼zeusvenus()回复于 2005-05-14 21:36:08 得分 0
还应该注意三者带来的系统开销相差比较大。Top
13 楼coolsunwind(飘)回复于 2005-05-14 21:48:20 得分 0
学习!Top
14 楼sunjian_qi(sonne)回复于 2005-05-15 00:13:10 得分 0
纠正速马老大一个错误,应该是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 位有效位Top
15 楼sunjian_qi(sonne)回复于 2005-05-15 00:14:09 得分 0
纠正速马老大一个错误,应该是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 位有效位Top
16 楼sunjian_qi(sonne)回复于 2005-05-15 00:15:36 得分 0
显示有问题我写的是负号,变成了−,用了Server.HtmlEncode???Top
17 楼fancyf(凡瑞)回复于 2005-05-15 00:19:16 得分 0
to sunjian_qi(sonne):
速马没有说错,他说的大小是存储的大小,decimal占8个字节,double-4个字节,single2个字节Top
18 楼fancyf(凡瑞)回复于 2005-05-15 00:20:05 得分 0
汗,正好少说了一半
应该decimal占16个字节,double-8个字节,single-4个字节Top
19 楼sunjian_qi(sonne)回复于 2005-05-15 00:33:02 得分 0
晕,是我没学好……Top
20 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2005-05-15 00:42:43 得分 0
再精确计算中使用浮点数是非常危险的,尽管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要小。Top





