【问题标题】:How to get the value without round up/down in Java? [duplicate]如何在Java中不向上/向下取整的值? [复制]
【发布时间】:2019-11-28 06:13:43
【问题描述】:
double d0 = Double.parseDouble("53.82233040000000557");
double d1 = Double.valueOf("53.82233040000000557");

输出

d0 = 53.822330400000006
d1 = 53.822330400000006

【问题讨论】:

  • @hc_dev 感谢提醒我误读了标题(有偏见,因为我正在输入一些 Js)

标签: java double primitive-types


【解决方案1】:

Java 中的精度数

java.math.BigDecimal 类更适合处理需要精确性的数字(如货币金额),请参阅BigDecimal VS double

它可以用于geo-coordinates (latitude/longitude)。尽管从业者认为double is precise enough for lat./long. - 因为您不想在纳米尺度上定位某些东西。

示例代码

如果您需要高精度和规模的数字,请使用 BigDecimal,如下所示:

BigDecimal decimalValue = new BigDecimal("53.82233040000000557");
System.out.println("as BigDecimal: " + decimalValue.toPlainString());
// prints exactly: 53.82233040000000557

在线运行这段代码(IDE一):Double VS BigDecimal for high precision

阅读全文

阅读更多关于Java: BigDecimal and BigInteger的教程

【讨论】:

    【解决方案2】:

    如果你需要精确,你必须使用BigDecimal

    【讨论】:

    • 由于这是一个新的贡献者,一些使用提示或代码示例可能会有所帮助。否则这个单句更值得评论;-)
    • 是的,你是对的。 :)
    【解决方案3】:

    答案是你不能。你得到的值是你可能存储在double中的值的最准确近似值。没有办法获得存储在double 中的更准确、更少舍入的值。

    因此,如果您要求答案完全不四舍五入,则不应使用double。您应该改用的数据类型是BigDecimal

    【讨论】:

      猜你喜欢
      • 2016-01-11
      • 2012-01-11
      • 1970-01-01
      • 2015-08-06
      • 2022-01-24
      • 2020-05-15
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多