如何从Java中删除十进制数字的最后一位数字?

时间:2016-06-13 14:50:21

标签: java

例如,当我有3.333并且执行该代码时,我需要数字为3.33。

这是我应该做的代码,但不是:

String number = Double.toString(first);
number = number.substring(0, string.length() - 1);
first = Double.parseDouble(number);

我尝试将数字转换为字符串,切断最后一个字符并再次将其保存为double。但它不起作用。它不会切断1位数,而是切断2,例如,它将返回3.3。

这种方法是否可靠,如果是,我该怎么做才能解决它?

此外,这个方法是否有可能使程序崩溃(只有十进制数通过该代码)并且会不会有精度损失?

6 个答案:

答案 0 :(得分:5)

使用String.format

String.format("%.2f", 3.333);

或使用BigDecimal

new BigDecimal(3.333).setScale(2, RoundingMode.DOWN)

setScale设置您需要的小数点数。 您可以稍后在上面的BigDecimal上执行toString()并将其打印出来。

答案 1 :(得分:1)

如果你想要总是相同的小数位数,那么据我所知,最好的解决方案就是这个:

DecimalFormat df = new DecimalFormat("#.00");

String formatedNumber = df.format(number);

答案 2 :(得分:1)

试试这个:

double d = 3.333;
String str = String.format("%1.2f", d);
d = Double.valueOf(str);
System.out.println(d);

输出:

  

3.33

答案 3 :(得分:1)

这个怎么样:

double value = 3.333;
// Multiply it by 100, convert the result into an integer to trim 
// remaining decimals then divide it by 100d to get the result as double
double result = (int)(value * 100) / 100d;
System.out.println(result);

<强>输出:

3.33

答案 4 :(得分:-1)

您尝试完成的主要问题是Double始终是64位信息。它们应该在表示抽象/无理值时尽可能准确,并且不打算在准确性方面进行操作。对于确切的值,它们不可信任(输入值1可能在保存为double或其他某种效果时最终为0.99999999998)。如果你想要一个确切的数字,考虑在某种情况下使用int s(即你可以创建一个包含分子和分母的分数对象)。你应该减少双倍的唯一一次是用于打印,这只能用你上面的String表示来完成。

答案 5 :(得分:-1)

此代码可靠。

Double number = 3.333 ;
String  mano   = Double.toString(number);
String akmuo = mano.substring(0, mano.length() - 1);
number = Double.parseDouble(akmuo);
System.out.println(number);