【问题标题】:double versus long for large numbers in JavaJava 中大数的 double 与 long
【发布时间】:2021-08-22 18:25:21
【问题描述】:

我刚刚开始学习编码,这可能是一个非常简单的问题,但我已经看到 double 用于大于 int 可以容纳的数字。如果我理解正确,double 可能不如使用 long 精确。

所以如果我有一个大于 int 可以容纳的数字,最好使用 double 还是 long?在什么情况下一种优于另一种?这方面的最佳做法是什么?

(假设我想用地球人口存储一个变量。是 double 还是 long 首选?)

【问题讨论】:

  • 注意还有BigDecimalBigInteger类型。
  • 就个人而言,我会使用 long ,因为地球人口将是一个整数。您也可以使用BigIntegerBigDecimal,尽管它们可能有点矫枉过正。
  • long 用于精确整数值,例如1234567890123;如果值大于MAX_VALUE (~1e19),您将有 整数溢出 (完全错误的值)。 double 用于 近似 值:最多 (2^53 - 1 ~ 1e16) 整数值是精确,但随后它们变为近似高达~1e308(无灾难整数溢出)
  • longdouble 的最大区别在于long 只能保存整数,而double 是浮点数类型(它可以保存分数)。见:Primitive Data Types

标签: java integer double long-integer


【解决方案1】:

tl;博士

对于人类种群,使用long 原始或Long 类。

详情

浮点类型trade away accuracy 以换取执行速度。 Java中的这些类型包括float/Floatdouble/Double

如果使用整数(无分数):

  • 对于从 -2^31 到 2^31-1 的较小数字(大约正负 20 亿,请使用 int/Integer。内容需要 32 位。
  • 对于更大的数字,请使用long/Long。内容需要 64 位。
  • 对于非常大的数字,请使用BigInteger

如果使用小数(不是整数):

  • 对于介于 (2-2^-23) * 2^127 和 2^-149 之间的数字,您关心准确性,请使用float/Float。内容需要 32 位。
  • 对于您关心准确性的较大/较小数字,请使用double/Double。内容需要 64 位。
  • 对于更极端的数字,请使用BigDecimal
  • 如果您关心准确性(例如金钱问题),请使用BigDecimal

所以对于地球上的人口,使用long/Long

【讨论】:

    猜你喜欢
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2013-09-03
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多