【发布时间】:2019-05-21 11:32:12
【问题描述】:
我遇到了一个我无法解决的问题。尝试了网站上描述的各种解决方案,但没有结果。
我正在传递一个字符串“total”,它转换为 30.00,但在 Doubleparse 上它更改为 30.0
我需要双精度为30.00,因为它必须添加到数组列表中,并且还显示为文本,如30.00 而不是30.0
我试过了
DecimalFormat df = new DecimalFormat("#.##");
Double number_total = Double.parseDouble(df.format(total));
错误:java.lang.IllegalArgumentException:坏类:类 java.lang.String 在 java.text.NumberFormat.format(NumberFormat.java:304) 在 java.text.DecimalFormat.format(DecimalFormat.java:702) 在 java.text.Format.format(Format.java:93) 在 com.example.jc.salesman.MainActivity.Totais(MainActivity.java:338) 在 com.example.jc.salesman.MainActivity$2.onClick(MainActivity.java:235)
String strSum = ((String.format("%.2f", Double.toString(sum))));
错误:进程:com.example.jc.salesman,PID:26845 java.util.IllegalFormatConversionException: %f 无法格式化
java.lang.String 参数 在 java.util.Formatter.badArgumentType(Formatter.java:1489) 在 java.util.Formatter.transformFromFloat(Formatter.java:2038) 在 java.util.Formatter.transform(Formatter.java:1465) 在 java.util.Formatter.doFormat(Formatter.java:1081) 在 java.util.Formatter.format(Formatter.java:1042) 在 java.util.Formatter.format(Formatter.java:1011) 在 java.lang.String.format(String.java:1999) 在 java.lang.String.format(String.java:1973) 在com.example.jc.salesman.MainActivity.Totais(MainActivity.java:368)
我什至在 main 中强制使用 Locale,
Locale.setDefault(new Locale("en", "US"));
请帮忙:)
public void Total (String total){
Log.d("log2","total: " + total);// it prints 30.00
Double number_total = Double.parseDouble(total);
Log.d("log2","number_total: " + total);// it prints 30.0
losing a decimal place.
array_Total.add (number_total); //Arraylist<Double
sum (double) = sum + number_total;
String strSum = (Double.toString(sum));
total.setText (strSum);
}
【问题讨论】:
-
double
30.0与 double30.00或 double30D相同 - 都是完全相同的数字,只是文本表示不同 - 这不是解析问题) - 你想要什么是字符串30.00- 所以试试String.format("%.2f", sum);(格式化双精度,而不是字符串)
标签: java android double decimal