Double.parseDouble теряет десятичное место - PullRequest
0 голосов
/ 21 мая 2019

Я столкнулся с проблемой, которую не могу решить.Перепробовал различные решения, описанные на сайте, безрезультатно.Я передаю строку « total », которая переводится в 30.00, но в Doubleparse она меняется на 30.0

Мне нужно, чтобы double было 30.00, потому что его нужно добавить вarraylist, а также отображается как текст, как 30.00, а не как 30.0

Я пытался

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

ОШИБКА: java.lang.IllegalArgumentException: Badкласс: класс 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)

Я даже заставил Locale в main,

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);
}

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Используйте String.format("%.2f", doubleValue), чтобы установить 2 десятичных знака.Но он округлит и остальные десятичные значения до 2 десятичных знаков (например, 30.2345 -> 30.23), поэтому, если вы хотите сохранить десятичные значения, сделайте это условно.

0 голосов
/ 21 мая 2019

Вы используете df.format() неправильно.Из javadoc метод .format () класса DecimalFormat берет Number (double, long или Object, который является подклассом Number).

Что вы можете сделать, это проанализировать и сохранить двойное как обычно (30.0).Если вам нужно вывести двойное число, вы можете вывести его, используя формататор строк, например String.format("%.2f", val)

...