Вывод преобразования с плавающей запятой в строку отличается

Я пытаюсь разобрать строку, чтобы плавать, но это дает мне несколько другой вывод. Предположим, мой код:

String a = "111111111111111111111.23";
Float f = Float.parseFloat(a);
System.out.println(f);

Это дает мне что-то вроде: 1.1111111E20

Проще говоря, это дает мне 111111110000000000000

Как получить все показанные данные? Я не хочу усекать входные данные.

2 ответа

Решение

Как получить целые данные как есть. Не хочу усекать входные данные.

Тогда что бы вы ни делали, не используйте float, По крайней мере использовать double, но даже double будет бороться с этим значением, так как числа с плавающей запятой IEEE-754 с двойной точностью имеют точность до 15 цифр, когда выражены в базе 10. Для большей точности посмотрите на BigDecimal,

BigDecimal никогда не округляется автоматически и не теряет точности, это очень предпочтительно в расчетах.

float является десятичным числовым типом, представленным 32-битным

double является 64-разрядным десятичным числом, поэтому оно может представлять большие значения, чем число с плавающей запятой.

Ты можешь использовать BigDecimal

public static void main(String[] args) {
        String a = "111111111111111111111.23";
        BigDecimal f = new BigDecimal(a);
        System.out.println(f);
    }

Выход

111111111111111111111.23
Другие вопросы по тегам