将双精度格式格式化为 2 位小数不起作用

发布于 2024-10-21 21:00:26 字数 633 浏览 1 评论 0原文

我想将这个 double:

3.499999999999999

舍入到:

3.50

我已经使用了这两种方法:

DecimalFormat df = new DecimalFormat("0.00");
        double result = Double.valueOf(df.format(input));
        System.out.println(answer);

public double round(double input)
    {
        int decimalPlace = 2;
        BigDecimal bd = new BigDecimal(input);
        bd = bd.setScale(decimalPlace,BigDecimal.ROUND_UP);

        return (bd.doubleValue());
    }

它不断打印:

3.5

有人有解决方案吗?因为我真的认为这应该有效。感谢您的帮助。

I want to round this double:

3.499999999999999

to:

3.50

And I already used these two methods:

DecimalFormat df = new DecimalFormat("0.00");
        double result = Double.valueOf(df.format(input));
        System.out.println(answer);

and

public double round(double input)
    {
        int decimalPlace = 2;
        BigDecimal bd = new BigDecimal(input);
        bd = bd.setScale(decimalPlace,BigDecimal.ROUND_UP);

        return (bd.doubleValue());
    }

But It keeps printing:

3.5

Does anyone have a solution for this? Because I really think that this should work. Thanks for your help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

离笑几人歌 2024-10-28 21:00:26

您的第一个解决方案非常非常接近。只需这样做:

    DecimalFormat df = new DecimalFormat("0.00");
    System.out.println(df.format(input));

您的版本不起作用的原因是您采用了 input 双精度,将其格式化为具有 2dp 的 String,然后将其转换回一个。然后,System.out.println 像往常一样打印 double,没有特殊的小数位规则。

Your first solution is really, really close. Just do this:

    DecimalFormat df = new DecimalFormat("0.00");
    System.out.println(df.format(input));

The reason your version doesn't work is that you're taking the input double, formatting it as a String with 2dp, but then converting it back to a double. System.out.println is then printing the double as it always would, with no special decimal-place rules.

只等公子 2024-10-28 21:00:26

您可以使用 printf 格式,这可能更简单。

System.out.printf("%.2f%n", 3.5);

印刷

3.50

You can use the printf formatting which may be simpler.

System.out.printf("%.2f%n", 3.5);

prints

3.50
一花一树开 2024-10-28 21:00:26

您是否尝试将 0 替换为 #

DecimalFormat df = new DecimalFormat("#.##");
System.out.println(df.format(输入));

根据 此处 # 如果数字不存在,将解析为 0

Did you try replacing the 0's with #'s?

DecimalFormat df = new DecimalFormat("#.##");
System.out.println(df.format(input));

According to here the # will be resolved to 0 if the digit is absent

暮凉 2024-10-28 21:00:26

您可以使用 apache commons-math 的 Precision 类

double result = Precision.round(3.499999999999999, 2);

You can use Precision class of apache commons-math

double result = Precision.round(3.499999999999999, 2);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文