当前位置: 首页 > 知识库问答 >
问题:

Java:使用DecimalFormats格式化双倍和整数,但保留没有小数分隔符的整数

程招
2023-03-14

我试图在Java程序中格式化一些数字。这些数字将同时是双精度和整数。在处理double时,我只想保留两个小数点,但在处理整数时,我希望程序不影响它们。换句话说:

双重输入

14.0184849945

双打-输出

14.01

整数-输入

13

整数-输出

13 (not 13.00)

有没有办法在同一个DecimalFormat实例中实现这一点?到目前为止,我的代码如下:

DecimalFormat df = new DecimalFormat("#,###,##0.00");
DecimalFormatSymbols otherSymbols = new   DecimalFormatSymbols(Locale.ENGLISH);
otherSymbols.setDecimalSeparator('.');
otherSymbols.setGroupingSeparator(',');
df.setDecimalFormatSymbols(otherSymbols);

共有2个答案

乜栋
2023-03-14

你能不能把它包装成一个实用程序调用。例如

public class MyFormatter {

  private static DecimalFormat df;
  static {
    df = new DecimalFormat("#,###,##0.00");
    DecimalFormatSymbols otherSymbols = new   DecimalFormatSymbols(Locale.ENGLISH);
    otherSymbols.setDecimalSeparator('.');
    otherSymbols.setGroupingSeparator(',');
    df.setDecimalFormatSymbols(otherSymbols);
  }

  public static <T extends Number> String format(T number) {
     if (Integer.isAssignableFrom(number.getClass())
       return number.toString();

     return df.format(number);
  }
}

然后,您可以只做如下操作:MyFormatter.format(int)等。

谢鸿羲
2023-03-14

只需将minimumFractionDigits设置为0即可。这样地:

public class Test {

    public static void main(String[] args) {
        System.out.println(format(14.0184849945)); // prints '14.01'
        System.out.println(format(13)); // prints '13'
        System.out.println(format(3.5)); // prints '3.5'
        System.out.println(format(3.138136)); // prints '3.13'
    }

    public static String format(Number n) {
        NumberFormat format = DecimalFormat.getInstance();
        format.setRoundingMode(RoundingMode.FLOOR);
        format.setMinimumFractionDigits(0);
        format.setMaximumFractionDigits(2);
        return format.format(n);
    }

}
 类似资料:
  • 试图删除所有不是0-9和句号的字母和字符。我正在使用,但它也删除了十进制,我如何也保留十进制呢?

  • 问题内容: 是否可以使用CSS格式化数字?即:小数位,小数点分隔符,千位分隔符等。 问题答案: 您可以使用。它也可以格式化为其他数字格式,例如拉丁文,阿拉伯文等。

  • 问题内容: 我想知道是否有可能在Java中使用String.format方法给出一个在零之前的整数? 例如: 1将变为001 2将变为002 … 11将变为011 12将变为012 … 526将保留为526 … 目前,我尝试了以下代码: 不幸的是,它在数字之前带有3个空格。可以在数字前加零吗? 问题答案: 使用格式说明为整数。的装置,该数目将是零填充,如果它是少于三个(在这种情况下)位。 有关其他

  • 问题内容: 这个问题很简单,但是我敢打赌,在这里询问可能比尝试理解有关以下文档的方法更直接: 观察值为“ 12,345”。 期望值为“ 12345”。 问题答案: 只需使用

  • 我正在使用十六进制值,我需要保留值的符号。我想知道是否有人有一种创造性的方法来保留整数的符号,而不使用?由于大小限制,我无法使用<code>BigInteger 我有一串十六进制值,如下所示: 我没有正确理解故障吗?失败似乎是由于设置了符号位。

  • 问题内容: 我正在尝试将双精度分隔为整数和小数部分 因此,例如,数字24.4应该分为24和4。 使用此方法可为我提供以下值: 我需要十进制的值为4。 如何解决这个问题? 问题答案: 你可以做一个String 。然后Integer 取回两个整数分量。