相关疑难解决方法(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万
查看次数

在java中将double转换为整数

在Java中,我想将double转换为整数,我知道如果你这样做:

double x = 1.5;
int y = (int)x;
Run Code Online (Sandbox Code Playgroud)

你得到y = 1.如果你这样做:

int y = (int)Math.round(x);
Run Code Online (Sandbox Code Playgroud)

你可能会得到2.但是,我想知道:因为整数的双重表示有时看起来像1.9999999998或其他东西,是否有可能通过Math.round()创建一个双重表示仍然会导致截断的数字,而不是比我们正在寻找的舍入数字(即代码中代码为1而不是2)?

(是的,我的意思是这样的:x 是否有任何值,其中y将显示一个截断的结果而不是x的圆形表示?)

如果是这样的话:有没有更好的方法将double变为圆形int而不会有截断的风险?


想象一下:Math.round(x)返回一个long,而不是double.因此:Math.round()不可能返回一个看起来像3.9999998的数字.因此,int(Math.round())将永远不需要截断任何内容并始终有效.

java double casting rounding

109
推荐指数
3
解决办法
42万
查看次数

将浮点值舍入到java中最接近的整数的最有效方法是什么?

我已经看到很多有关舍入浮点值的SO的讨论,但考虑到效率方面没有可靠的问答.所以这里是:

将浮点值舍入到最接近的整数的最有效(但正确)方法是什么?

(int) (mFloat + 0.5);
Run Code Online (Sandbox Code Playgroud)

要么

Math.round(mFloat);
Run Code Online (Sandbox Code Playgroud)

要么

FloatMath.floor(mFloat + 0.5);
Run Code Online (Sandbox Code Playgroud)

或者是其他东西?

我最好使用标准java库中可用的东西,而不是我必须导入的一些外部库.

java optimization rounding floating-accuracy

3
推荐指数
1
解决办法
4103
查看次数