鍍金池/ 問答/Java/ java四舍五入問題

java四舍五入問題

請(qǐng)教java如何0.5精度的四舍五入呢?
例如: 1.22 -> 1

       1.55   ->     1.5
       1.76    ->     2
       1.71     ->    1.5
       0.25      ->    0.5
       0.24       ->    0  
回答
編輯回答
單眼皮

你肯定知道Math.round可以用來做正常的四舍五入。
所以你所謂的按0.5舍入其實(shí)可以換一種想法:就是把你的數(shù)字先乘2,再正常四舍五入,再除2。
按照你的例子:
1.55*2=3.1,四舍五入=3,3/2=1.5。
1.76*2=3.52,四舍五入=4,4/2=2。
以此類推。
很多事情變通一下就很簡(jiǎn)單了~

2017年2月6日 16:32
編輯回答
兔囡囡

如果是需要得到浮點(diǎn)數(shù)四舍五入的顯示結(jié)果(即String形式)的話,使用 java.text.DecimalFormat,關(guān)于用法,請(qǐng)自行搜索。

2018年6月8日 21:55
編輯回答
法克魷

BigDecimal,就帶有精度轉(zhuǎn)換算法,并且提供舍尾、進(jìn)位、四舍五入等多種算法

2018年5月26日 11:40
編輯回答
遺莣
//#1.自己實(shí)現(xiàn)
public double round(double in) {
    double dec = in - (int)in;
    double out = dec >= 0.5 ?
        (int)i + ((int)((dec - 0.5) / 0.25)) * 0.5 + 0.5 :
        (int)i + ((int)(dec / 0.25)) * 0.5;
    return out;
}

//#2.'白色夜空'的方法,Math.round()。(僅適用于對(duì)十分位做四舍五入)
public double round(double in) {
    double in2 = Math.round(2 * in);
    return d / 2;
}

//#3.BigDecimal的實(shí)例方法setScale(int newScale, int roundingMode)
public double round(double in) {
    BigDecimal in2 = BigDecimal.valueOf(2 * in);
    //0:保留0位小數(shù)
    //BigDecimal.ROUND_HALF_UP:五入
    return dec.setScale(0, BigDecimal.ROUND_HALF_UP).doubleValue() / 2;
}
2017年9月11日 18:51