相关疑难解决方法(0)

如何在Java中将数字舍入到n个小数位

我想要的是一种将double转换为使用half-up方法进行舍入的字符串的方法 - 即如果要舍入的小数为5,则它总是向上舍入到前一个数字.这是在大多数情况下舍入大多数人所期望的标准方法.

我也希望只显示有效数字 - 即不应该有任何尾随零.

我知道这样做的一种方法是使用该String.format方法:

String.format("%.5g%n", 0.912385);
Run Code Online (Sandbox Code Playgroud)

收益:

0.91239
Run Code Online (Sandbox Code Playgroud)

这很好,但它总是显示5位小数的数字,即使它们不重要:

String.format("%.5g%n", 0.912300);
Run Code Online (Sandbox Code Playgroud)

收益:

0.91230
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用DecimalFormatter:

DecimalFormat df = new DecimalFormat("#.#####");
df.format(0.912385);
Run Code Online (Sandbox Code Playgroud)

收益:

0.91238
Run Code Online (Sandbox Code Playgroud)

但是你可以看到这使用了半均匀舍入.也就是说,如果前一个数字是偶数,它将向下舍入.我想要的是这个:

0.912385 -> 0.91239
0.912300 -> 0.9123
Run Code Online (Sandbox Code Playgroud)

在Java中实现这一目标的最佳方法是什么?

java decimal rounding digits

1209
推荐指数
22
解决办法
155万
查看次数

将一个小数加倍到2位小数

如果值为200.3456,则应格式化为200.34.如果是200,那应该是200.00.

java double rounding

447
推荐指数
11
解决办法
113万
查看次数

如何将double值舍入为2个小数点?

可能重复:
在java中将double加倍到两位小数

我想将double值向上舍入到2个小数点.

例如:我有双d = 2; 结果应该是结果= 2.00

java

34
推荐指数
7
解决办法
23万
查看次数

如何使用字符串生成器在java中打印最多两个小数位?

嗨我在分割字符串构建器和打印后尝试打印字符串构建器让我看看我的代码,

string.append("Memomry usage:total:"+totalMemory/1024/1024+
"Mb-used:"+usageMemory/1024/1024+
" Mb("+Percentage+"%)-free:"+freeMemory/1024/1024+
" Mb("+Percentagefree+"%)");
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,"totalmemory"和"freememory"是双重类型,其字节值不为空,所以我将它除以"1024"两次得到"Mb","string"是字符串生成器的变量使用之后代码我只是打印它得到的结果,如下所示,

Used Memory:Memomry usage: 
total:13.3125Mb-used:0.22920989990234375Mb (0.017217645063086855%)
-free:13.083290100097656Mb (0.9827823549369131%)
Run Code Online (Sandbox Code Playgroud)

我希望获得二进制位置的百分比和mb中使用和空闲内存的值,就​​像这个"使用:2345.25"在这个问题中记得

希望你的建议

提前致谢

java stringbuilder jsp

8
推荐指数
1
解决办法
1万
查看次数

如何截断双倍到N位小数?

我想将我的double值舍入到N个小数位(比如说一个),实际上只是省略了后面的所有数字:

0.123 #=> 0.1
0.19  #=> 0.1
0.2   #=> 0.2
Run Code Online (Sandbox Code Playgroud)

这个问题已经多次提出,例如这里这里.推荐的方法是使用BigDecimal然后缩放它,特别是为了避免昂贵的转换为字符串和返回.我需要的舍入模式显然是RoundingMode.DOWN.

所以方法是这样的:

static double truncate(double value, int places) {
    return new BigDecimal(value)
        .setScale(places, RoundingMode.DOWN)
        .doubleValue();
}
Run Code Online (Sandbox Code Playgroud)

但是,由于精度的降低,它会带来一些意想不到的结果:

truncate(0.2, 1) #=> 0.2
truncate(0.3, 1) #=> 0.2
truncate(0.4, 1) #=> 0.4

truncate(0.2, 3) #=> 0.2
truncate(0.3, 3) #=> 0.299
truncate(0.4, 3) #=> 0.4
Run Code Online (Sandbox Code Playgroud)

这引出了两个问题:

  1. 是它应该如何工作0.3?为什么在这种情况下会失去精确度?难道它没有击败拥有的全部目的BigDecimal吗?

  2. 如何正确截断我的值?

谢谢.

java rounding bigdecimal

5
推荐指数
1
解决办法
8401
查看次数

标签 统计

java ×5

rounding ×3

bigdecimal ×1

decimal ×1

digits ×1

double ×1

jsp ×1

stringbuilder ×1