NET中十进制、浮点和双精度之间的差异?

在.NET中,decimalfloatdouble之间有什么区别

什么时候会有人用这些

floatdouble是浮点二进制点类型。换句话说,它们代表如下数字:

10001.10011

二进制数和二进制点的位置都在值内编码

decimal是浮点十进制点类型。换句话说,它们代表如下数字:

12345.65789

同样,十进制点的数字和位置都在值中编码–这就是为什么十进制仍然是浮点类型而不是定点类型

需要注意的重要一点是,人类习惯于以十进制形式表示非整数,并期望以十进制表示的精确结果;并非所有的十进制数都可以用二进制浮点表示,例如0.1,所以如果使用二进制浮点值,实际上可以得到0.1的近似值。当使用浮点小数点时,仍然会得到近似值–例如,1除以3的结果无法精确表示

关于在以下情况下使用什么:

  • 对于“自然精确小数”的值,最好使用decimal。这通常适用于人类发明的任何概念:金融价值是最明显的例子,但也有其他例子。考虑到潜水员或溜冰运动员的得分,例如:

  • 对于那些更自然的、无法准确测量的值,float/double更合适。例如,科学数据通常以这种形式表示。在这里,原始值一开始就不是“小数精度”,因此保持“小数精度”对预期结果并不重要。使用浮点二进制点类型比使用小数要快得多

发表评论