【问题标题】:Format a double to 6 decimal places precision格式化双精度到 6 位小数精度
【发布时间】:2018-11-27 09:07:00
【问题描述】:

我想将双精度值格式化为 6 位精度而不进行四舍五入。

格式化后的预期值到小数点后 6 位

20790123833965.960938

我尝试过使用十进制格式

   DecimalFormat formatter = new DecimalFormat("#0.000000");
   System.out.println(formatter.format(hashValue) );

我得到了这个

20790123833965.960000

【问题讨论】:

  • 结果是合理的,一个double只能提供15到16位小数的精度。
  • 输入是什么?
  • 为了获得更高的精度,请使用BigDecimal:BigDecimal hashValue = new BigDecimal("20790123833965.960938123"); 然后它将产生预期的输出。
  • 任何答案有帮助吗?如果没有,请告诉你你还缺少什么,我们仍然在这里提供帮助。如果是,请记住接受最有帮助的一个。谢谢。

标签: java precision number-formatting


【解决方案1】:

正如@Benoit 已经在评论中所说,为了保持您的号码的完整精度,您需要一个BigDecimal

BigDecimal hashValue = new BigDecimal("20790123833965.960938");
DecimalFormat formatter = new DecimalFormat("#0.000000");
System.out.println(formatter.format(hashValue));

输出:

20790123833965.960938

【讨论】:

    【解决方案2】:

    使用此代码,它将起作用。

    public class JavaFormatter {
        public static void main(String args[]) {
            BigDecimal hashValue = new BigDecimal("20790123833965.960938");     
            DecimalFormat formatter = new DecimalFormat("#.######");
            System.out.println(formatter.format(hashValue));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-03-17
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      相关资源
      最近更新 更多