C#中decimal,float和double的区别?

在.Net中,数值类型decimal,float,和double有什么区别呢?

你可能会说,他们都表示浮点数啊(floating point),是的,没有错。区别在于float, double是二进制浮点数(binary floating point),而decimal是十进制浮点数(decimal floating point)。
二进制浮点实际上是这样的形式:
10001.10010110011

而十进制浮点是这样的:
12345.65789

和机器不同,对人而言,一般习惯了用十进制的形式来表示非整型,并且希望这个数值表示是精确的,但是不是所有的十进制浮点数都可以精确的转化为二进制浮点数,很多情况下只能取近似的值,比如0.1用二进制浮点数表示的话,只能得到一个近似的值。反过来二进制浮点数转化为十进制浮点数也可能只得到一个近似的表示。

怎么使用呢?
对那些“自然而言的十进制数”,推荐用decimal来表示,例如,财经方面的数据。另外例如跳水运动员的分数。
其它的一些数值,(人造属性的数值),实际上即不能用decimal精确表示也不能用double/float精确表示,例如科学数据,那么可以考虑用double或者是float。

参考链接:
http://stackoverflow.com/questions/618535/difference-between-decimal-float-and-double-in-net?rq=1
http://csharpindepth.com/Articles/General/FloatingPoint.aspx
http://csharpindepth.com/Articles/General/Decimal.aspx

By Code问答

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 3 = 4