有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带两个十进制数的Java双精度

比如说,我有以下代码:

    DecimalFormat df = new DecimalFormat();
    df.setMaximumFractionDigits(2);
    df.setMinimumFractionDigits(2);
    df.format(125,436573);  

现在返回一个字符串

既然您无法将String转换为double(使用cast),那么如何获得类型double

据我所知,这只会删除两位数之后的所有内容,而不是实际的四舍五入

我一直在寻找Java.lang.math对象,但似乎找不到解决方案

对于记录,我需要将它插入到数据库表中


共 (3) 个答案

  1. # 1 楼答案

    您可以使用commons-math3Precision.round(double x, int scale)

  2. # 2 楼答案

    这是一个例子,我不确定你问的问题是你真正想提出的问题。似乎您希望小数点正好有两位小数,但这不仅仅是最终输出格式的问题,而是持久性的问题

    你不想用doubles来做这件事 你会得到舍入错误,因为小数不能准确地存储在二进制记数法中。出于同样的原因,你不想在数据库中存储双倍的钱。(Linklinklink

    正如您在那里的链接中看到的,您希望在数据库中使用带有隐含小数点、BigDecimal或数字字段的整数组合

  3. # 3 楼答案

    这是我用来四舍五入到小数点后两位的

    public static double round2(double d) {
        final double factor = 1e2;
        return d > Long.MAX_VALUE / factor || d < -Long.MAX_VALUE / factor ?
                (long) (d < 0 ? d * factor - 0.5 : d * factor + 0.5) / factor : d;
    }
    

    你不需要产生一个字符串,这样你就可以再次解析它