有什么区别decimal
, float
and double
在.NET 中?
什么时候有人会使用其中之一?
float
(C# 别名为System.Single
) and double
(C# 别名为System.Double
) are 漂浮的binary点类型 http://csharpindepth.com/Articles/General/FloatingPoint.aspx. float
是 32 位;double
是 64 位的。换句话说,它们代表这样的数字:
10001.10010110011
二进制数和二进制小数点的位置都编码在该值内。
decimal
(C# 别名为System.Decimal
) is a 漂浮的decimal点型 http://csharpindepth.com/Articles/General/Decimal.aspx。换句话说,它们代表这样的数字:
12345.65789
再次,数量和位置decimal点都被编码在值中——这就是为什么decimal
仍然是浮点类型而不是定点类型。
需要注意的重要一点是,人类习惯于以十进制形式表示非整数,并期望以十进制表示形式得到精确的结果;并非所有十进制数都可以精确地用二进制浮点表示 - 例如 0.1 - 因此,如果您使用二进制浮点值,您实际上会得到 0.1 的近似值。使用浮动小数点时,您仍然会得到近似值 - 例如,无法精确表示 1 除以 3 的结果。
至于什么时候用什么:
-
对于“自然精确的小数”的值,最好使用decimal
。这通常适用于人类发明的任何概念:财务价值是最明显的例子,但也有其他的例子。例如,考虑给潜水员或滑冰运动员的分数。
-
对于更多无法真正测量的自然产物的价值exactly反正,float
/double
更合适。例如,科学数据通常以这种形式表示。在这里,原始值一开始就不是“十进制精确度”,因此对于预期结果来说保持“十进制精度”并不重要。浮点二进制点类型的处理速度比小数要快得多。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)