-6

可能重复:
如何在 Java 中将数字四舍五入到 n 位小数

我有一个 Double 值,例如 "1234.9678" 。我只想返回一位小数,没有四舍五入或上限。

我用过这种方式,但它返回“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() );
4

1 回答 1

6
public double roundTwoDecimals(double d)

具有此签名的任何方法都无法满足您的要求。反例请参见此处。

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

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

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

public BigDecimal roundTwoDecimals(double d)

或者:

public String roundTwoDecimals(double d)
于 2012-10-17T08:58:51.247 回答