после десятичной дроби, почему два нуля не учитываются в двойном - PullRequest
0 голосов
/ 29 мая 2020
private static DecimalFormat df = new DecimalFormat("0.00");

    public static void main(String[] args) {
        double input = 300.00;

        System.out.println("double : " + input);

        Double d=Double.valueOf(df.format(input));
       System.out.println("##1::"+d);
       System.out.println("##2 ::"+df.format(input));
       System.out.println("##3 ::"+Double.valueOf(df.format(input)));           
    }
}

Вывод:

double : 300.0 
##1::300.0 
##2 ::300.00 
##3 ::300.0 

Ожидаемый вывод: 300.00

1 Ответ

2 голосов
/ 30 мая 2020

Вы можете использовать BigDecimal для масштабирования и двойного округления. Попробуйте это:

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Test {

    public static void main(String[] args) {
        BigDecimal input = BigDecimal.valueOf(300);

        System.out.println("double 2 digit: " + Test.round(input, 2));
        System.out.println("double 5 digit: " + Test.round(input, 5));
    }

    public static BigDecimal round(BigDecimal bd, int scale) {
        return bd.setScale(scale, RoundingMode.HALF_UP);
    }
}

Выведите примерно так:

double 2 digit: 300.00
double 5 digit: 300.00000
...