将双值截断到小数点后6位。

我在解决一个问题,需要将输出结果截断,令我惊讶的是,我一直没有找到在java中截断数字的方法。

输出需要是一个数字,后面跟着6位小数。

我想要的是double truncate(double number,int places) 和产出truncate(14/3.0) = 4.666666.

但我得到的是

public static double round(double value, int places) {
    if (places < 0) throw new IllegalArgumentException();

    long factor = (long) Math.pow(10, places);
    value = value * factor;
    long tmp = Math.round(value);
    return (double) tmp / factor;
  }
// rounds( 14/3.0 , 6 ) = 4.666667

随着 String.format 我得到

String.format("%.6f", 14/3.0) = 4.666667

我还尝试了一个在stackoverflow上找到的解决方案,建议使用BigDecimal,得到的答案也是一样的。

NumberFormat 似乎也有同样的效果

java.text.NumberFormat f = java.text.NumberFormat.getNumberInstance();
f.setMinimumFractionDigits(6);
System.out.println(f.format(14/3.0)); // 4.666667

是否有一个内置的方法可以做到这一点,或者我需要使用BigInteger之类的东西来编写我自己的方法?

解决方案:

这是因为你不是截断而是四舍五入。

long tmp = Math.round(value);

如果你用一个投法来代替,它应该可以工作。

long tmp = (long) value;

所以下面的代码输出 4.666666 如你所愿。

public static void main(String[] args) throws Exception {
    System.out.println(truncate(14/3.0, 6));
}

public static double truncate(double value, int places) {
    if (places < 0) {
        throw new IllegalArgumentException();
    }

    long factor = (long) Math.pow(10, places);
    value = value * factor;
    long tmp = (long) value;
    return (double) tmp / factor;
}

给TA打赏
共{{data.count}}人
人已打赏
未分类

在ARKit中设置ARCamera曝光时间

2022-9-8 16:41:35

未分类

React-Native-Video -> 如何保存视频?

2022-9-8 16:41:37

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索