浮点型类型
在此练习中,将使用浮点型数据来了解每种数据类型之间的微妙差异。
浮点型是一种简单的值类型,表示小数。与整数不同,除了要考虑在给定的浮点型类型中可以存储的最大值和最小值以外,还需要考虑其他注意事项。
评估浮点型类型
首先,必须考虑每个类型允许的精度位数。精度是小数点后可以存储的值的数目。
其次,必须考虑值的存储方式以及该方式对值的准确度造成的影响。换句话说,float 和 double 值在内部以二进制 (base 2) 格式存储,而 decimal 值以十进制 (base 10) 格式存储。为什么了解这一点很重要?
如果你已习惯了十进制 (base 10) 数学运算,在对二进制浮点值执行数学运算时,可能会产生意外结果。通常,二进制浮点值的数学运算结果是实际值的近似值。因此,float 和 double 有用,因为它们可以使用较小的内存占用量来存储较大的数字,但仅当近似值有用时才应使用这两个数据类型。例如,在计算视频游戏中武器的爆炸区域时,偏离千分之几就已非常接近实际值。
如果需要更精确的答案,应使用 decimal。 decimal 类型的每个值都具有比较大的内存占用量,但执行数学运算可提供更精确的结果。因此,在处理财务数据时或在任何需要通过计算得出精确结果的场景下,应使用 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)可以看出,float 和 double 使用不同于 decimal 的表示法来表示其最大和最小的可能值。但这种表示法是什么意思?
解密大额浮点值
由于浮点型类型可以非常精确地存储大额数字,因此可以使用“E 表示法”来表示该类型的值,这是一种科学记数法,表示“乘以 10 的 n 次幂”。因此,5E+2 之类的值将是 500 值,因为它相当于 5 * 10^2 或 5 * 10 * 10。
概括
- 浮点型类型是一种简单的值数据类型,可以存储小数。
- 为应用程序选择适当的浮点类型类型不仅仅需要考虑它可以存储的最大值和最小值。还必须考虑在小数点后可以保留多少个值、如何存储数字以及内部存储如何影响数学运算的结果。
- 当数字变得特别大时,有时可以使用“E 表示法”来表示浮点值。
- 编译器和运行时处理
decimal的方式与处理float或double的方式存在基本差异,尤其是在确定数学运算需要多少准确度时。