我想要的是一种将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中实现这一目标的最佳方法是什么?
我总是被告知永远不要代表钱double或float类型,这次我向你提出问题:为什么?
我确信有一个很好的理由,我根本不知道它是什么.
可能重复:
将小数点后的双精度数加到2位有效数字
我在我的应用程序中处理了很多双值,是否有任何简单的方法来处理Java中十进制值的格式?
还有其他更好的办法吗?
DecimalFormat df = new DecimalFormat("#.##");
Run Code Online (Sandbox Code Playgroud)
我想要做的基本上是格式双值
23.59004 to 23.59
35.7 to 35.70
3.0 to 3.00
9 to 9.00
Run Code Online (Sandbox Code Playgroud) 我正在尝试将BigDecimal值向上舍入到小数点后两位.
我正在使用
BigDecimal rounded = value.round(new MathContext(2, RoundingMode.CEILING));
logger.trace("rounded {} to {}", value, rounded);
Run Code Online (Sandbox Code Playgroud)
但它不能始终如一地做我想做的事:
rounded 0.819 to 0.82
rounded 1.092 to 1.1
rounded 1.365 to 1.4 // should be 1.37
rounded 2.730 to 2.8 // should be 2.73
rounded 0.819 to 0.82
Run Code Online (Sandbox Code Playgroud)
我不关心有效数字,我只想要两位小数.我如何使用BigDecimal执行此操作?或者是否有另一个类/库更适合这个?
可能重复:
将小数点后的双精度数加到2位有效数字
我知道有很多关于如何围绕这种数字的例子.但有人可以告诉我如何圆双,获得我可以显示为字符串的值,并总是有2位小数?
是否有可以截断或舍入Double的函数?在我的代码中的某一点,我想要一个像:1.23456789舍入到的数字1.23
我知道BigDecimal是用于在Java中表示货币价值的推荐最佳实践.你用什么?您是否更喜欢使用更好的库?
这就是我将双精度数转换为2位小数的方法:
amount = roundTwoDecimals(amount);
public double roundTwoDecimals(double d) {
DecimalFormat twoDForm = new DecimalFormat("#.##");
return Double.valueOf(twoDForm.format(d));
}
Run Code Online (Sandbox Code Playgroud)
如果金额= 25.3569或类似的东西,这很好用,但如果金额= 25.00或金额= 25.0,那么我得到25.0!我想要的是舍入和格式化为2位小数.
可能重复:
将小数点后的双精度数加到2位有效数字
我试图用前导零来格式化一个双精度到2位小数,并且没有运气.这是我的代码:
Double price = 32.0;
DecimalFormat decim = new DecimalFormat("#.##");
Double price2 = Double.parseDouble(decim.format(price));
Run Code Online (Sandbox Code Playgroud)
我希望输出32.00相反,我得到32.0
任何解决方案?
可能重复:
将小数点后的双精度数加到2位有效数字
我有:
mkm=((((amountdrug/fluidvol)*1000)/60)*infrate)/ptwt;
Run Code Online (Sandbox Code Playgroud)
在我的Java代码中.代码工作正常,但返回到几个小数位.如何将其限制为2或3?