我想要的是一种将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中实现这一目标的最佳方法是什么?
嗨我在分割字符串构建器和打印后尝试打印字符串构建器让我看看我的代码,
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"在这个问题中记得
希望你的建议
提前致谢
我想将我的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)
这引出了两个问题:
是它应该如何工作0.3?为什么在这种情况下会失去精确度?难道它没有击败拥有的全部目的BigDecimal吗?
如何正确截断我的值?
谢谢.