【问题标题】:Java - Decimal Format Precision lost when returning a Float or DecimalJava - 返回浮点数或小数时丢失十进制格式精度
【发布时间】:2017-09-03 07:59:28
【问题描述】:

我查看了许多与格式化数字相关的主题。 除了值 3.101 之外,它在大多数情况下都有效。 Float 和 Double 已与 ## 和 00 格式一起使用。

import java.text.DecimalFormat;

public class DecimalFormatTest {
public static void main(String[] args) 
{
    Float d1 = -3.1011f;
    Double ds = -3.1011;
    DecimalFormat df = new DecimalFormat("#.##");
    System.out.println (Double.valueOf(df.format(d1)));
    System.out.println (Double.valueOf(df.format(ds)));

    DecimalFormat df2 = new DecimalFormat("#.00");
    System.out.println (Double.valueOf(df2.format(d1)));
    System.out.println (Double.valueOf(df2.format(ds)));
 }
}

输出是:

-3.1
-3.1
-3.1
-3.1

预期输出:

-3.10
-3.10
-3.10
-3.10

如上所述,这适用于我测试过的所有其他数字。由于某种原因,这导致了一个问题。

关于是什么让这个数字如此不同以及获得第二个数字需要什么额外步骤有什么想法吗?

请记住,关键是我希望最终返回 Float 或 Double。

【问题讨论】:

  • 我不太清楚你的问题是什么。
  • 去掉Double.valueOf位,效果会更好。
  • 您正在正确格式化该值,但随后将其重新解析为双精度值(这将去除尾随的零)。
  • 我删除了 Double.valueOf,它使用“#.00”格式工作,但我确实需要返回 Double 而不是字符串。

标签: java double precision


【解决方案1】:

这行得通:

Double number = 3.101;
System.out.printf("%.2f", number);

【讨论】:

  • 欢迎来到 Stack Overflow!虽然您可能已经解决了这个用户的问题,但纯代码的答案对于将来遇到这个问题的用户来说并不是很有帮助。请编辑您的答案,以解释您的代码解决原始问题的原因。
【解决方案2】:

试试这个。

public static void main(String[] args) 
    {
        Float d1 = -3.1011f;
        Double ds = -3.1011;
        DecimalFormat df = new DecimalFormat("0.00");
        System.out.println (df.format(d1));
        System.out.println (df.format(ds));

        DecimalFormat df2 = new DecimalFormat("0.00");
        System.out.println (df2.format(d1));
        System.out.println (df2.format(ds));
     }

【讨论】:

  • 欢迎来到 Stack Overflow!虽然您可能已经解决了这个用户的问题,但纯代码的答案对于将来遇到这个问题的用户来说并不是很有帮助。请编辑您的答案以解释为什么您的代码解决了原始问题。
【解决方案3】:

这里的罪魁祸首是Double.valueOf。尝试删除它,它应该可以正常工作,如下所示: 此外,放置("#.##") 会导致进一步的问题。所以宁愿在精确之后使用任何("0.00")

import java.text.DecimalFormat;

public class DecimalFormatTest {
public static void main(String[] args) 
    {
        Float d1 = -3.1011f;
        Double ds = -3.1011;
        DecimalFormat df = new DecimalFormat("0.00");
        System.out.println (df.format(d1));
        System.out.println (df.format(ds));

        DecimalFormat df2 = new DecimalFormat("0.00");
        System.out.println (df2.format(d1));
        System.out.println (df2.format(ds));
     }
}

供参考:Double decimal formatting in Java

【讨论】:

  • 谢谢,在这种情况下这很有意义,但是使用 Double.valueOf 是因为我实际上需要一个 Double 而不是字符串。
  • 查看参考链接。
  • @Unhandled - 但是,您不需要 double 数据类型来进行显示。 Double 数据类型删除尾随零,因为不需要它们。您只希望尾随零用于显示目的。
猜你喜欢
  • 2014-02-07
  • 2015-02-08
  • 2014-08-14
  • 1970-01-01
  • 2014-05-09
  • 2016-06-18
  • 2016-08-17
  • 2011-01-25
  • 2021-12-02
相关资源
最近更新 更多