gpt4 book ai didi

Java DecimalFormat 在格式化 double 时失去精度

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:24 25 4
gpt4 key购买 nike

当我执行下面的代码时:

public class Test {
public static void main(String args[]){
DecimalFormat format = new DecimalFormat();
Double value = new Double(-1350825904190559999913623552.00);

StringBuffer buffer = new StringBuffer();
FieldPosition position = new FieldPosition(0);
format.format(new BigDecimal(value), buffer, position);
System.out.println(buffer);
}
}

这会正确打印 -1,350,825,904,190,559,999,913,623,552。我的代码确实经过了很多 double ,所以我不希望从 double 转换为 bigdecimal。我认为 BigDecimal 的处理时间很长。所以我做 format.format(value, buffer, position)我看到精度丢失了。我得到的输出是 -1,350,825,904,190,560,000,000,000,000

我在这里做错了什么?有没有更好的方法来处理这个问题并仍然保持精度。我不想在这里处理 BigDecimals,而只是处理小数。

有什么建议吗?

最佳答案

double 没有无限精度,通过将 double 转换为BigDecimal(比如当您执行 double r = 1/3; 时,您无法使用 int 获得更高的精度,即 0.0 因为它加宽一个 int 到一个 double)。相反,您可以使用 String。有点像

DecimalFormat format = new DecimalFormat();
String value = "-1350825904190559999913623552.00";
System.out.println(format.format(new BigDecimal(value)));

关于Java DecimalFormat 在格式化 double 时失去精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29687659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com