1

我有这个给出结果的代码

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 结果
4

5 回答 5

2

为什么不使用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);
}
于 2013-07-29T06:23:01.457 回答
1

试试这个,它正在工作

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

“#。” = 在小数点后添加 # 到您需要的四舍五入位置。

于 2013-07-29T06:21:44.797 回答
1

这适用于您的所有号码:

BigDecimal.valueOf(128.54).setScale(1, RoundingMode.HALF_UP)
          .setScale(0, RoundingMode.HALF_DOWN)
于 2013-07-29T06:24:36.810 回答
0

如果您确实有如此奇怪的要求,请使用以下代码

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

的值rounded将是128.0。如果value是,128.64那么结果将是129.0

如果您有正常的四舍五入(.5和更高的四舍五入),那么您必须将第二行更改为

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

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

于 2013-07-29T08:03:17.463 回答
-1
  1. Math.round(a*100)产生Math.round(12873)结果12873
  2. 第 1 步的结果12873是一个long类型化的值,但不是一个double值。
  3. 因此,当它除以 100 时,会生成一个non-decimalresult 12873/100 = 128
  4. 现在它存储在一个双变量中作为128.0.
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
于 2013-07-29T06:22:33.207 回答