只有一个十进制的Java双精度值

只有一个十进制的Java双精度值,java,decimal,bigdecimal,Java,Decimal,Bigdecimal,可能重复: 我有一个双重值,如“1234.9678”。我只想返回一个小数点,不需要四舍五入或上限 我用过这种方式,但它返回“1234.96” 我只想要“1234.9” 我甚至用这种方式。。。但是没有运气。。。有人能帮忙吗 double d = 1234.9678; int decimalPlace = 1; BigDecimal bd = new BigDecimal( Double.toString(d) ); bd = bd.setScale( decimalPlace, BigDecim

可能重复:

我有一个双重值,如“1234.9678”。我只想返回一个小数点,不需要四舍五入或上限

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

我只想要“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() );
具有此签名的任何方法都不可能满足您的要求。请参阅反例

浮点变量没有小数位数,因此不能四舍五入到特定的小数位数。它们有两个位置

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

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

public BigDecimal roundTwoDecimals(double d)
或:


“不舍入”是什么意思?如果你只需要一个小数点,那么新的十进制格式(“#.#”)怎么样?-1,不要认为OP自己会努力解决这个问题。@Thilo为什么?因为我们想成为一个更好的问题库,这样它也能帮助其他人?好吧,那我疯了^^如果不需要舍入,为什么要指定不舍入的舍入模式?请不要在这里说“不走运”之类的话。这些信息是无用的。说出你得到了什么和你期望得到什么。@Sandy你的问题已经由EJP和berry很好地回答了,为什么我要添加另一个同样内容的答案?你现在需要做的就是接受其中一个答案(你认为对你最有帮助的答案),每个人都很高兴
public double roundTwoDecimals(double d)
public BigDecimal roundTwoDecimals(double d)
public String roundTwoDecimals(double d)