Double.parseDouble失去小数位

时间:2019-05-21 11:32:13

标签: java android double decimal

我遇到了一个我无法解决的问题。尝试了网站上描述的各种解决方案,但没有结果。 我传递的字符串“ 总计”转换为30.00,但在Doubleparse上它更改为powershell /?

我需要将double设为30.0,因为必须将其添加到数组列表中,并且还必须以文本形式显示为30.00而不是30.00

我尝试过

30.0
  

错误:java.lang.IllegalArgumentException:错误的类:class   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)

DecimalFormat df = new DecimalFormat("#.##");
Double number_total = Double.parseDouble(df.format(total));
  

错误:进程: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,

String strSum = ((String.format("%.2f", Double.toString(sum))));

请帮助:)

Locale.setDefault(new Locale("en", "US"));

2 个答案:

答案 0 :(得分:0)

您错误地使用了df.format()。从javadoc中,DecimalFormat的.format()方法采用一个数字(双精度,长整数或对象,它是Number的子类)。

您可以做的是正常解析并存储double(30.0)。当您确实需要输出double时,可以使用String格式器输出,例如String.format("%.2f", val)

答案 1 :(得分:0)

使用String.format("%.2f", doubleValue)将其设置为2个小数点。但这也会将您的其他十进制值四舍五入为2个小数点(例如30.2345-> 30.23),因此,如果要保留十进制值,请有条件地进行。