【问题标题】:How to force a decimal point using Java DecimalFormat?如何使用 Java DecimalFormat 强制小数点?
【发布时间】:2020-09-17 17:44:15
【问题描述】:

我有这个代码有两个双打:

double a = 2000.01;
double b = 2000.00;
String pattern = "0.##";
DecimalFormat dc = new DecimalFormat(pattern); // <- "0.##" does not work
System.out.println(dc.format(a));
System.out.println(dc.format(b));

需要一个能够产生以下输出的模式:

2000.01
2000.

b 存在小数点,即使不打印零

【问题讨论】:

  • 为什么要打印2000.?这甚至不再是一个数字了。
  • 这是一个外部系统的馈送。它们不接受尾随零,也不接受没有小数点的平面数字。
  • 鉴于我的示例中的两个双打,他们将接受我打印的字符串。我不能改变他们的接受标准。还有字符串“2000”。以点结尾,而不是零。
  • 等一下——你想要.00 来表示整数吗?因为如果是这样,您现有的代码似乎可以正常工作。真的 - 你的问题要求强制使用小数点,所以我以此为基础。

标签: java decimalformat


【解决方案1】:

一种选择是使用“DecimalFormat.setDecimalSeparatorAlwaysShown”来始终包含小数。

示例:

double a = 2000.01;
double b = 2000.00;
String pattern = "0.##";
DecimalFormat df = new DecimalFormat(pattern);
df.setDecimalSeparatorAlwaysShown(true);
System.out.println(df.format(a));
System.out.println(df.format(b));

样本输出:

2000.01
2000.

【讨论】:

    【解决方案2】:

    使用此模式:#0.00

    应该是这样的:

    double a = 2000.01;
    double b = 2000.00;
    String pattern = "#0.00";
    DecimalFormat dc = new DecimalFormat(pattern);
    System.out.println(dc.format(a));
    System.out.println(dc.format(b));
    

    哪些打印:

    2000.01
    2000.00
    

    【讨论】:

    • 虽然不是所要求的格式。 OP 希望将第二个值格式化为“2000.00”。来自问题:“即使未打印零,b 也存在小数点”
    【解决方案3】:

    扩展十进制格式

    public class MDF extends DecimalFormat {
      public String format(double d) {
        String s = super.format(d);
        if (!s.contains(".")) {
          return s + ".";
        }
        return s;
      }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    相关资源
    最近更新 更多