一本关于Java的书中有这样一段话:"我建议在实数中坚持使用double类型",另外还有"你应该在实值中坚持使用双倍类型"。我不明白什么是实数或实值... 实数与什么相对呢?
实数与 整数 相对。在数学中,实数可以是连续区间内的任何值,例如4.2
或圆周率π。整数是实数的子集。
这里是Java原始数据类型。对于数字,一些重要的数据类型包括当你需要整数时使用int
,当你想允许小数时使用double
。如果你偏离这些类型,通常有一个具体的原因。
整数在二进制中很容易表示,并且可以轻松指定可以用指定位数精确表示的整数范围。在Java中,int
使用32位,可以得到从-2,147,483,648到2,147,483,647的值。其他整型类型也类似,但位数不同。
然而,表示沿着连续区间的数字更加困难,因为在实数线上的任意两点之间,存在无穷多个其他实数。因此,不可能在区间内精确地表示所有实数。解决这个问题的一种方法是使用浮点数。我不会深入讨论细节,但基本上会失去一些精度,因此无法精确表示某些数字。对于许多目的来说,这并不重要,但对于像跟踪银行账户余额这样的事情,这一点可能很重要。阅读著名的《计算机科学家应该了解的有关浮点算术的所有内容》可能会值得一看。
在Java中,解决这些问题的一种方法包括使用类似于BigDecimal
的内容。其他一些语言可能提供其他基元作为替代品。例如,C#具有decimal
数据类型,而Java则没有。
Real意味着浮点数,即double
或float
,而不是整数(int
或long
)