只有一个十进制的Java双值

时间:2012-10-17 08:52:33

标签: java decimal bigdecimal

  

可能重复:
  How to round a number to n decimal places in Java

我有像“1234.9678”这样的Double值。我想只返回一个十进制,没有舍入或上限。

我使用过这种方式,但它返回“1234.96”

public double roundTwoDecimals(double d) {

DecimalFormat twoDForm = new DecimalFormat("#.##");

return Double.valueOf(twoDForm.format(d)); }

我只想要“1234.9”,

我甚至用这种方式......但没有运气......任何人都可以帮忙吗?

double d = 1234.9678;
int decimalPlace = 1;
BigDecimal bd = new BigDecimal( Double.toString(d) );
bd = bd.setScale( decimalPlace, BigDecimal.ROUND_HALF_UP );
System.out.println( bd.doubleValue() );

1 个答案:

答案 0 :(得分:6)

public double roundTwoDecimals(double d)

没有使用此签名的方法可以按照您的要求执行操作。请参阅here了解反例。

浮点变量没有小数位,因此不能舍入到特定的小数位数。他们有二进制位置。

你必须使用十进制基数。在Java中,这意味着使用DecimalFormat转换为字符串,或BigDecimal转换为十进制基数的数字,以十进制基数舍入,然后将其转换为字符串,这也是是十进制基数。

这意味着您必须将方法的签名更改为:

public BigDecimal roundTwoDecimals(double d)

或:

public String roundTwoDecimals(double d)