java - 将 Double 截断为小数点后两位?

标签 java math double

我知道这个问题重复了很多次,但请先看一下声明,然后再将其标记为已回答:)

为了将 double 值截断到小数点后 2 位,我使用了两种经常被提及的方法。它们在下面给出

    //this one
    DecimalFormat dtime = new DecimalFormat("#.##"); 
    return Double.valueOf(dtime.format(val));
    //or the one below
    BigDecimal bd = new BigDecimal(val);
    BigDecimal rounded = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
    return rounded.doubleValue();

问题是,对于这两种方式,我大多在数据集中获得正确的舍入值。但奇怪的是,我同时得到了 2.00000000000005 或 19.97999999999 这样的值。

我不明白的问题是为什么只有少数值没有四舍五入。有什么问题吗?

最佳答案

For truncating the double values 2 decimal places I use two ways which are mostly mentioned everywhere.

他们都错了,因为他们在尝试不可能的事情。 没有将 double 截断为小数点后两位,因为 double 没有小数位。他们有二进制的地方。参见 my answer here为证。如果您想要小数位,则必须使用小数基数,即 BigDecimalDecimalFormat

关于java - 将 Double 截断为小数点后两位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15818919/

相关文章:

java - Solr Suggester - 不区分大小写

matlab - 逻辑图绘图不正确(Matlab)

floating-point - 42 可以精确表示为 float 吗?

Java int 与 Double

c++ - 将 32 位浮点转换为 IEEE 80 位

java - 我无法运行 Scada-Lts、WebappClassLoaderBase 和 ViewGraphicLoader 类错误

java - 删除任务失败后如何继续gradle构建?

java - Android 资源链接失败值,styles.xml

java - 通过栈计算负数算术表达式

math - 计算基数样条曲线的切线