.NET和.NETdecimal中有什么区别?floatdouble
float并且double是浮点二进制点类型。换句话说,它们代表这样的数字:
float
double
10001.10010110011
二进制数和二进制点的位置都在值内编码。
decimal是浮点数类型。_ 换句话说,它们代表这样的数字:
decimal
12345.65789
同样,数字和小数点的位置都在值内编码——这就是decimal仍然是浮点类型而不是定点类型的原因。
需要注意的重要一点是,人类习惯于以十进制形式表示非整数,并期望以十进制表示的精确结果;并非所有十进制数都可以用二进制浮点数精确表示——例如 0.1——所以如果你使用二进制浮点值,你实际上会得到一个 0.1 的近似值。当使用浮点小数点时,您仍然会得到近似值——例如,无法精确表示 1 除以 3 的结果。
至于什么时候用:
精度是主要区别。
浮点数- 7 位(32 位)
double-15-16 位(64 位)
十进制-28-29 位有效数字(128 位)
小数具有更高的精度,通常用于需要高精度的金融应用程序中。小数比双精度/浮点数慢得多(在某些测试中高达 20 倍)。
小数和浮点数/双精度数不能在没有强制转换的情况下进行比较,而浮点数和双精度数可以。小数还允许编码或尾随零。
float flt = 1F/3; double dbl = 1D/3; decimal dcm = 1M/3; Console.WriteLine("float: {0} double: {1} decimal: {2}", flt, dbl, dcm);
结果 :
float: 0.3333333 double: 0.333333333333333 decimal: 0.3333333333333333333333333333