美文网首页我爱编程
double类型数字如何保留两位小数?

double类型数字如何保留两位小数?

作者: SanSpurs | 来源:发表于2018-04-11 17:30 被阅读0次

原文地址: Round a double to 2 decimal places


网友 Luca Vix

function Double round2(Double val) {
    return new BigDecimal(val.toString()).setScale(2,RoundingMode.HALF_UP).doubleValue();
}

注意toString()方法!!!!
这是因为BigDecimal需要将double转换成精确的二进制数!!!
下面是一些答案以及他们的失败案例:

// 没有bug!
new BigDecimal(val.toString()).setScale(2,RoundingMode.HALF_UP).doubleValue() 

Double val = 260.775d; 
new BigDecimal(val).setScale(2,RoundingMode.HALF_UP).doubleValue()
期待值 260.78  实际值 260.77

Double val = 260.775d; 
Math.round(val * 100.d) / 100.0d 
期待值 260.78  实际值 260.77

Double val = 256.025d; 
new DecimalFormat("0.00").format(val) 
期待值 256.03  实际值 256.02 

Double val = 256.025d;
(int)(val * 100 + 0.5) / 100.0;
期待值 256.03  实际值 256.02 

网友 Pritesh Mhatre

请使用 Apache commons math:

Precision.round(10.4567, 2)

该方法的实质还是用的上述网友的方法


commons-math的maven坐标

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-math3</artifactId>
    <version>3.2</version>
</dependency>

相关文章

网友评论

    本文标题:double类型数字如何保留两位小数?

    本文链接:https://www.haomeiwen.com/subject/pdszhftx.html