Вывод преобразования с плавающей запятой в строку отличается
Я пытаюсь разобрать строку, чтобы плавать, но это дает мне несколько другой вывод. Предположим, мой код:
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