gpt4 book ai didi

java - 打印 2 位数字,但以 6 位精度舍入

转载 作者:行者123 更新时间:2023-12-02 03:03:18 25 4
gpt4 key购买 nike

用于获取“.”后恰好有 2 位数字的字符串。我可以做这样的事情:

        DecimalFormat df = (DecimalFormat)DecimalFormat.getInstance(Locale.US);
df.applyPattern("0.00");
df.setRoundingMode(RoundingMode.HALF_UP);
String output = df.format(value);

当我有一个诸如 828.054999999702d 之类的数字时,它会将其格式化为目前为止正确的 828.05,因为下一个数字为“4”,并且会将其四舍五入为空。

但是如果我需要保留更多的数字精度,只是不想显示它怎么办?

我快速创建的是这个工作代码:

        double prettyValue = value;
prettyValue = Math.round(prettyValue * 1000000d) / 1000000d;
prettyValue = Math.round(prettyValue * 100000d) / 100000d;
prettyValue = Math.round(prettyValue * 10000d) / 10000d;
prettyValue = Math.round(prettyValue * 1000d) / 1000d;
prettyValue = Math.round(prettyValue * 100d) / 100d;
DecimalFormat df = (DecimalFormat)DecimalFormat.getInstance(Locale.US);
df.applyPattern("0.00");
df.setRoundingMode(RoundingMode.HALF_UP);
String output = df.format(prettyValue);

这将四舍五入第 6 位、第 5 位、第 4 位、第 3 位,然后是第二位,NumberFormat 无需执行任何操作,只需打印剩余的 2 位数字,之后就会有零。

但我认为应该已经有一个开箱即用的舍入,但我只是没有看到。尝试对 BigDecimals 执行相同的操作会给我带来完全相同的问题。

我想要的结果是将 828.054999999702 四舍五入为 828.06

最佳答案

我不确定我是否完全理解您的问题,所以让我回顾一下:

  • 您有一些 double 值,其有效小数位可能超过 6 位。
  • 您想要将该值舍入为 6 位小数并使用 HALF_UP 模式。
  • 您只想显示前 2 个小数位(我不明白为什么,但我不会质疑它)。

在这种情况下,我建议您首先使用 BigDecimal 进行舍入,否则可能会出现精度错误:

double value = 1.23456789;
BigDecimal rounded = BigDecimal.valueOf( value ).setScale(6, RoundingMode.HALF_UP);

这应该产生值1.234568

然后像您一样使用 NumberFormat 但始终向下舍入:

DecimalFormat df = (DecimalFormat)DecimalFormat.getInstance(Locale.US);
df.applyPattern("#.##");
df.setRoundingMode(RoundingMode.DOWN);
String output = df.format( rounded );

结果应该是1.23

如果您的输入值为 4.23499999999235,您将得到 4.235000(四舍五入为 6 位数字)和 4.23

编辑:我不知道有任何舍入模式将 4.234999999999235 舍入为 4.24,但您应该能够通过链接来实现它多次 setScale() 调用:

BigDecimal rounded = BigDecimal.valueOf( value );
for( int digit = 6; digit >= 2; digit--) {
rounded = rounded .setScale( digit, RoundingMode.HALF_UP );
}

这应该四舍五入到小数数字 6,然后是 5 等等,最后四舍五入到 4.24。我仍然不确定这是否是正确的舍入方式,但您比我更了解您的要求:)

关于java - 打印 2 位数字,但以 6 位精度舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42142694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com