在点之后用更大的数字舍入值

时间:2013-07-29 06:15:46

标签: java math

我有这个给出结果的代码

double a = 128.73;
double roundOff = Math.round(a*100)/100;
System.out.println(roundOff);
Result is :- 128.0

如果dot之后的值大于5,即(6,7,8或9),那么我需要它 应该通过在必须舍入的给定值上加1来给出结果,即

  • 128.54应该给128.0结果
  • 128.23应该给128.0结果
  • 128.73应该给129.0的结果
  • 128.93应该给129.0的结果

5 个答案:

答案 0 :(得分:1)

试试这个,它正在运作

 double d = 0.51;
 DecimalFormat newFormat = new DecimalFormat("#.");
 double twoDecimal =  Double.valueOf(newFormat.format(d));

“#”。 =在十进制之后添加#到你需要的地方。

答案 1 :(得分:1)

为什么不使用ROUND_HALF_UPBigDecimal#setScale

a = a.setScale(0, BigDecimal.ROUND_HALF_UP);

double myDouble = 55.2; //55.51
BigDecimal test = new BigDecimal(myDouble);
test = test.setScale(0, BigDecimal.ROUND_HALF_UP);
//test is 55 in the first example and 56 in the second

修改

正如@Alex注意到的,上面的代码无法正常工作。以下是使用Math#ceilMath#floor的另一种方式:

double n = myDouble - Math.floor(myDouble); //This will give you the number 
                                            //after the decimal point.
if(n < 0.6) {
     myDouble = Math.floor(myDouble);
}
else {
     myDouble = Math.ceil(myDouble);
}

答案 2 :(得分:1)

这适用于您的所有数字:

BigDecimal.valueOf(128.54).setScale(1, RoundingMode.HALF_UP)
          .setScale(0, RoundingMode.HALF_DOWN)

答案 3 :(得分:0)

如果您确实有这样的需求,请使用以下代码

double value = 128.54;
double rounded = (((value * 10) + 4) / 10)

rounded的值将为128.0。 如果value128.64,则结果为129.0

如果您有正常的舍入(.5及更高的舍入值),则必须将第二行更改为

double rounded = (((value * 10) + 5) / 10)

秘诀是常量(45)必须为10减去应该向上舍入的值。

答案 4 :(得分:-1)

  1. Math.round(a*100)使Math.round(12873)结果为12873
  2. 第1步的结果12873long类型的值,但不是double值。
  3. 因此,当它除以100时,会生成non-decimal结果12873/100 = 128
  4. 现在它存储在一个双变量128.0
  5. double roundOff = Math.round(128.54);
    System.out.println(roundOff);// output -- 129.0
    double roundOff = Math.round(128.23);
    System.out.println(roundOff);// output -- 128.0
    double roundOff = Math.round(128.73);
    System.out.println(roundOff);// output -- 129.0
    double roundOff = Math.round(128.93);
    System.out.println(roundOff);// output -- 129.0