我想要的是一种将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中实现这一目标的最佳方法是什么?
可能重复:
将小数点后的双精度数加到2位有效数字
我正在尝试将十进制度(23.1248)转换为分钟样式度(23 7'29.3").这是我到目前为止所做的:
double a=23.1248;
int deg=(int)a;//gives me the degree
float b=(float) (a-deg);
int min=(int) (b*60);//gives me the minutes
double sec= (double) ((c*60)-min);//gives me my seconds
Run Code Online (Sandbox Code Playgroud)
一切正常,但我希望将秒数舍入到最接近的十分之一或十分之一.我已经查看了十进制格式,但不希望将其转换为字符串.我也看过bigdecimal,但不认为这会有所帮助,
在Java中,我将k定义为
double k=0.0;
我从数据库中获取数据并添加相同的使用while循环,
while(rst.next()) {
k = k + Double.parseDouble(rst.getString(5));
}
Run Code Online (Sandbox Code Playgroud)
NOTE: In database, I have values as 125.23, 458.45, 665.99 (all two decimals)
当我显示k时,我得到的价值为
k = 6034.299999999992
因此我介绍BigDecimal并将代码更改为以下内容
BigDecimal bd = new BigDecimal(k);
bd = bd.setScale(2,BigDecimal.ROUND_UP);
Run Code Online (Sandbox Code Playgroud)
现在我得到新的总数bd=6034.30是正确的.
问题1
好吧问题是当我在其他地方使用相同的时候,下面是我得到的
k = 157.3
bd = 157.31
Run Code Online (Sandbox Code Playgroud)
它应该显示bd=157.30为手动添加后我得到157.30.
任何原因显示为157.31.
问题2
还有什么原因k显示这么多的十进制值?下面是我得到的双变量k的不同值
157.3
67.09
1014.6000000000003
229.06999999999996
Run Code Online (Sandbox Code Playgroud)
我不明白它有时会显示一个小数,有时显示2位小数,大部分时间显示14位小数.
任何建议将不胜感激.
我已经看过这个答案了。
的行为让我有点困惑BigDecimal.valueOf(float)。这是示例:
System.out.println(BigDecimal.valueOf(20.2f)); //prints 20.200000762939453
Run Code Online (Sandbox Code Playgroud)
所以
float f = BigDecimal.valueOf(20.2f)
.setScale(2, RoundingMode.UP)
.floatValue();
System.out.println(f); //prints 20.21
Run Code Online (Sandbox Code Playgroud)
这绝对不是我预期的行为。有没有办法round up正确浮动避免此类错误?
我试图显示浮点变量高达两位数的精度.假设变量是50.35,那么它就会显示出来.但是当变量为50.30时,它只显示50.3.无法显示50.30.