例如,当我有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。
这种方法是否可靠,如果是,我该怎么做才能解决它?
此外,这个方法是否有可能使程序崩溃(只有十进制数通过该代码)并且会不会有精度损失?
答案 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);