C#数据类型中的decimal与double的区别

作者:袖梨 2022-06-25

decimal类型

作为补充,decimal类型用来表示高精度的浮点数 

 
Name
 
CTS Type
 
De script ion
 
Significant Figures
 
Range (approximate)
 
decimal
 
System.Decimal
 
128-bit high precision decimal notation
 
28
 
±1.0 × 10?28 to ±7.9 × 1028

 
从上表可以看出,decimal的有效位数很大,达到了28位,但是表示的数据范围却比float和double类型小。decimal类型并不是C#中的基础类型,所以使用的时候会对计算时的性能有影响。

decimal 128bit大小 有效数字:28~29,虽然decimal类型有比浮点类型更高的精度,但它的范围更小。故double转decimal有可能发生溢出错误,此外,decimal的计算速度稍微慢一些。

Console.WriteLine(1.618031234567895);

输出结果:1.61803123456789

最后一个数字5丢失了,这符合我们对double类型精度的预期。

要显示具有完整精度的数字,必须将字面值显示地声明为decimal类型,这是通过追加一个m(或者M)来实现的:

Console.WriteLine(1.618031234567895m);

输出结果:1.618031234567895

之所以用m表示decimal,是因为这种数据类型经常用在货币(monetary)计算中。

decimal 型。 

 
类型
 
大致范围
 
精度
 
.NET Framework 类型
 
decimal
 
±1.0 × 10e?28 至 ±7.9 × 10e28
 
28 到 29 位有效位
 
System.Decimal

 
s在声明decimal类型数据时,可以 a: decimal myData = 100,此时编译器隐式转换整型数100为 100.0m;当然也可以b: decimal myData = 100.0m,但是 如果是 decimal myData = 100.0d或者decimal myData = 100.0f,就不行了,因为100.0d或者100.0f,编译器认为是浮点数,而浮点数和decimal 类型之间不存在隐式转换;因此,必须使用强制转换在这两种类型之间进行转换。This is the important,否则编译器便报错。所以一般的财务软件在处理时,都会用decimal 类型。
好了,改用decimal 型之后,就OK 了,结果就完完整整地显示为 66.24 了

相关文章

精彩推荐