浮点型类型

在此练习中,将使用浮点型数据来了解每种数据类型之间的微妙差异。

浮点型是一种简单的值类型,表示小数。与整数不同,除了要考虑在给定的浮点型类型中可以存储的最大值和最小值以外,还需要考虑其他注意事项。

评估浮点型类型

首先,必须考虑每个类型允许的精度位数。精度是小数点后可以存储的值的数目。

其次,必须考虑值的存储方式以及该方式对值的准确度造成的影响。换句话说,floatdouble 值在内部以二进制 (base 2) 格式存储,而 decimal 值以十进制 (base 10) 格式存储。为什么了解这一点很重要?

如果你已习惯了十进制 (base 10) 数学运算,在对二进制浮点值执行数学运算时,可能会产生意外结果。通常,二进制浮点值的数学运算结果是实际值的近似值。因此,floatdouble 有用,因为它们可以使用较小的内存占用量来存储较大的数字,但仅当近似值有用时才应使用这两个数据类型。例如,在计算视频游戏中武器的爆炸区域时,偏离千分之几就已非常接近实际值。

如果需要更精确的答案,应使用 decimaldecimal 类型的每个值都具有比较大的内存占用量,但执行数学运算可提供更精确的结果。因此,在处理财务数据时或在任何需要通过计算得出精确结果的场景下,应使用 decimal

对每个有签名的浮点类型使用 MinValue 和 MaxValue 属性

若要查看各种数据类型的值范围:

Console.WriteLine("");
Console.WriteLine("Floating point types:");
Console.WriteLine($"float  : {float.MinValue} to {float.MaxValue} (with ~6-9 digits of precision)");
Console.WriteLine($"double : {double.MinValue} to {double.MaxValue} (with ~15-17 digits of precision)");
Console.WriteLine($"decimal: {decimal.MinValue} to {decimal.MaxValue} (with 28-29 digits of precision)");

运行此代码以检查每个数据类型的值范围:

Floating point types:
float  : -3.402823E+38 to 3.402823E+38 (with ~6-9 digits of precision)
double : -1.79769313486232E+308 to 1.79769313486232E+308 (with ~15-17 digits of precision)
decimal: -79228162514264337593543950335 to 79228162514264337593543950335 (with 28-29 digits of precision)

可以看出,floatdouble 使用不同于 decimal 的表示法来表示其最大和最小的可能值。但这种表示法是什么意思?

解密大额浮点值

由于浮点型类型可以非常精确地存储大额数字,因此可以使用 "E 表示法 " 来表示该类型的值,这是一种科学记数法,表示 " 乘以 10 的 n 次幂 "。因此,5E+2 之类的值将是 500 值,因为它相当于 5 * 10^25 * 10 * 10

概括