格式化双精度到 6 位小数精度

Posted

技术标签:

【中文标题】格式化双精度到 6 位小数精度【英文标题】:Format a double to 6 decimal places precision 【发布时间】: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位小数的精度。 输入是什么? 相关:How to determine the max precision for double 为了获得更高的精度,请使用BigDecimal:BigDecimal hashValue = new BigDecimal("20790123833965.960938123"); 然后它将产生预期的输出。 任何答案有帮助吗?如果没有,请告诉你你还缺少什么,我们仍然在这里提供帮助。如果是,请记住接受最有帮助的一个。谢谢。 【参考方案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));
    

【讨论】:

以上是关于格式化双精度到 6 位小数精度的主要内容,如果未能解决你的问题,请参考以下文章

精度浮点型数据精确到了几位小数呢?

将双精度转换为双精度,带一位小数和一位小数?

格式,Java 中的双精度和整数的 2 位小数和 0

C 语言中双精度浮点型精度怎样保留位数

取一个双精度浮点数,并输出它(保留小数点后8位),

是否可以将两位小数分配给双精度