2013-04-30 61 views
13

我试图在Java程序中格式化一些数字。数字将是双打和整数。处理双精度时,我只想保留两位小数点,但是在处理整数时我希望程序不会受到影响。换句话说:Java:使用DecimalFormat格式化双精度和整数,但保留不包含小数点分隔符的整数

双打 - 输入

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); 
+4

为什么一定是相同的'DecimalFormat'实例?有2个'DecimalFormat'实例有什么问题,一个保留两位数字越过小数点,一个没有任何数字越过小数点? – rgettman 2013-04-30 21:29:00

+0

因为每次编程格式的数字都是双精度或整数,而不知道形成之前的类型。所以,我想要一个能够“理解”数字是否是双精度的修正小数点的实例 - 或者它是一个整数 - 以保持不受影响。 – Lefteris008 2013-05-01 09:50:19

回答

26

您可以只设置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

谢谢,解决了这个问题! :) – Lefteris008 2013-05-01 10:43:23

+0

现在格式为44.0到44和55.60到55.6。 如何保持使用格式的最后零? – user1510006 2016-09-27 10:00:59

3

你能不能把这个封装到一个实用程序调用中。例如

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)

相关问题