Float Вывод в экспоненциальной форме

 
 
 
Сообщения:208
Всем доброго дня!

Совсем ламерский вопрос, но всё же..

Float f1 = new Float(9999999);
System.out.println("f1="+f1);//Выводит 9999999.0

Float f2 = new Float(99999999);
System.out.println("f2="+f2);//Выводит 1.0E8

Почему f2 вывелся в экспоненциальной форме? Как этого избежать?

При выводе в принципе отформатировать-то можно, но тут проблема глубже. Я отправляю эти данные в soap сообщении, и вот там получается такое экспоненциальное значение.
 
 
Сообщения:117
Это происходит из-за того, что число больше или равно 10^7. Такая логика работы метода Float.toString(float). Настроить где-то это нельзя.
 
 
Сообщения:1642
System.out.println("f1="+f1);//Выводит 9999999.0
//можно переписать как 
System.out.println("f1="+f1.toString());//Выводит 9999999.0
//Данный метод 
public String toString() {
        return Float.toString(value);
}
//вызывает следующий по цепочке
public static String toString(float f) {
        return FloatingDecimal.toJavaFormatString(f);
}
//и дальше
public static String toJavaFormatString(float var0) {
        return getBinaryToASCIIConverter(var0).toJavaFormatString();
}
//и ещё
public String toJavaFormatString() {
        int var1 = this.getChars(this.buffer);
        return new String(this.buffer, 0, var1);
}
// а вот тут
    private int getChars(char[] var1) {
        if (this.decExponent > 0 && this.decExponent < 8) {
        } else if (this.decExponent <= 0 && this.decExponent > -3) {
        } else {
        }
// можно увидеть, что если количество цифр в экспоненте от 1 до 7, то одна запись, если от 0 до -2, то другая, а в остальных случаях с буквой E.
// все захардожено и поменять нельзя(если только не использовать String.format)
Изменен:13 июн 2019 15:24
 
 
Сообщения:208
Большое спасибо за столь развернутый ответ!
 
Модераторы:frymock
Сейчас эту тему просматривают:Нет