我知道这个问题已被多次质疑,但我在其他线程中尝试了所有解决方案,而且我找不到符合我想要的解决方案......
所以我有一个像-9.22841
这样的输入,它被读作一个字符串,我想要做的是将这个数字格式化为两个小数,如-9.23
,而不是将其四舍五入然后转换它会加倍而不会失去这种格式...
我尝试了许多方法,例如String.format("%.2f",number)
和下面的方法......
String l = -9.22841
DecimalFormat df = new DecimalFormat("#,00");
String tmp =df.format(l);
double t = Double.parseDouble(tmp);
和这一个:
String l = -9.22841
DecimalFormat df = new DecimalFormat("#.00");
String tmp =df.format(l);
double t = Double.parseDouble(tmp);
但每当我尝试在String.format("%.2f",number)
或DecimalFormat df = new DecimalFormat("#.00");
中转换为double时,会将错误转换为双倍
当我这样做时:
DecimalFormat df = new DecimalFormat("#,00");
输出错误,类似于-9.23
,应该是-9.22
感谢您的时间......
答案 0 :(得分:1)
您可以在小数点后切掉字符串两个空格:
String number = "-9.22841";
String shorterNumber = number.substring(0, number.indexOf(".")+3);
double t = Double.parseDouble(shorterNumber);
System.out.println(t);
答案 1 :(得分:1)
这就是你想要的:
String number = "-9.22841";
DecimalFormat formatter = new DecimalFormat("0.00");
formatter.setRoundingMode(RoundingMode.DOWN);
number = formatter.format(Double.valueOf(number));
System.out.println(number);
输出将是:
-9,22
答案 2 :(得分:0)
您可以使用以下功能:
import java.text.DecimalFormat;
import java.math.RoundingMode;
public static double formatValue(Double number) {
DecimalFormat df = new DecimalFormat("####0.00");
df.setRoundingMode(RoundingMode.DOWN);
return Double.parseDouble(df.format(number));
}
输入= 31.6227890, 输出= 31.62
答案 3 :(得分:0)
对于那些希望进行十进制处理的人:科特林
fun validateNumber(number: String): String {
return if (number.contains(".") && number.length > 3+number.indexOf("."))
number.substring(0, number.indexOf(".")+3)
else if (number.contains(".")){
number.substring(0, number.indexOf(".")+2)+"0"
}else{
"$number.00"
}
}