如何仅在需要时打印带有两位小数的双精度数

时间:2016-06-08 12:45:41

标签: java

我想格式化以下值,如下所述:

双d = 1234 结果应为1,234

双d = 1234.0 结果应为1,234

双d = 1234.5 结果应该是1,234.50

我试过这个方法

NumberFormat nf = new DecimalFormat("#,##.##");
nf.setMinimumFractionDigits(2);
nf.setMaximumFractionDigits(2);
System.out.println(nf.format(d1));

但是当值为1234或1234 .0时,它不起作用。

5 个答案:

答案 0 :(得分:3)

这种事情对于一个格式化程序来说很痛苦。考虑使用

if (d1 % 1.0 == 0.0/*yeah, this ain't quick, but then neither is I/O*/){
    // I'm a whole number, floating point modulus is valid in Java.
    // And this is a remarkably good way of testing if a floating
    // point value is a whole number.
    // Format to 0 decimal places.
} else {
    // Format to 2 decimal places.
}

答案 1 :(得分:1)

试试这个

NumberFormat nf = new DecimalFormat("#,##.##");
System.out.println(nf.format(d1));

if(d-(int)d==0){
   System.out.println(d);
}
else{
   System.out.println(nf.format(d));
}

答案 2 :(得分:1)

我喜欢Bathsheba的解决方案,但是如果你想让1234.001也被视为1234:

jQuery(document).ready(function($){
    var offset = 300;
    var speed = 250;
    var duration = 500;
     $(window).scroll(function(){
            if ($(this).scrollTop() < offset) {
           $('.topbutton') .fadeOut(duration);
            } else {
           $('.topbutton') .fadeIn(duration);
            }
        });
  $('.topbutton').on('click', function(){
    $('html, body').animate({scrollTop:0}, speed);
    return false;
    });
});

答案 3 :(得分:0)

System.out.printf("%.0f",34.0f);

答案 4 :(得分:0)

您可以检查不同的条件并相应地定义格式

double d = 1234.5;
        String inp[] = Double.toString(d).split("\\.");
        if((inp.length ==1 &&(inp[1] =="0" )) || inp.length ==0){
            NumberFormat nf = new DecimalFormat("#,###");
            System.out.println(nf.format(d));
        }else {
            NumberFormat nf = new DecimalFormat("#,###.##");
            nf.setMinimumFractionDigits(2);
            nf.setMaximumFractionDigits(2);
            System.out.println(nf.format(d));
        }