gpt4 book ai didi

java - 使用 Java 标准将 Double 转换为 String

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:08:39 27 4
gpt4 key购买 nike

我有下面的代码

  double cellValue = 78871234510124568.0;

String cell = new BigDecimal(cellValue).toPlainString();
String b = String.format("%.0f", cellValue);

System.out.println("Double Value using Big Decimal " + cell);
System.out.println("Double Value using String format " + b);

我设置的 double 值没有作为输出返回。

Double Value using Big Decimal 78871234510124576
Double Value using String format 78871234510124576

是否有一种标准方法可以将 Double 转换为 String 而无需显式类型转换,值的范围是 long 数据类型(最大值)而不是 double

我问这个问题的目的是因为我正在阅读使用 Apache POI 的 Excel 工作表,其中所有单元格类型在 Excel 中都是通用的。我正在使用 getNumericCellValue() 读取始终以十进制格式返回数字的单元格的值。例如 222 将返回为 22.0。我想删除小数并将其转换为字符串。

最佳答案

本质上,问题的根本原因是当您从 POI 获得 double 时:

Cell myCell = ... ;
double cellValue = myCell.getNumericCellValue();

在那里,cellValue 已经对 78871234510124568.078871234510124576.0(以及至少中间的所有数字)具有相同的内部表示:

System.err.println(Double.doubleToRawLongBits(78871234510124568.0));
System.err.println(Double.doubleToRawLongBits(78871234510124576.0));

输出:

4859809850462277474
4859809850462277474

这只是浮点值如何存储在内存中的问题。只是没有足够的位来区分这些数字。有关详细信息,请参阅 What Every Computer Scientist Should Know About Floating-Point ArithmeticIEEE floating point

如果您需要更高的精度,您必须将值作为 String 检索,然后使用 String 进行进一步处理,例如将其解析为 BigDecimal :

Cell myCell = ... ;
String cellValue = myCell.getStringCellValue();
DecimalFormat df = (DecimalFormat) NumberFormat.getInstance(Locale.US);
df.setParseBigDecimal(true);
BigDecimal value = (BigDecimal) df.parse(cellValue);

您需要考虑适当的语言环境,以便正确处理小数点(.,)。 Locale.US 使用 ..

关于java - 使用 Java 标准将 Double 转换为 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36592866/

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