Обработка больших нет в Java - PullRequest
2 голосов
/ 27 января 2012

У меня проблемы с большими числами в Java при попытке сохранить их в переменной с плавающей точкой.

import java.math.BigDecimal;
import java.text.DecimalFormat;

public class testConversion {


public static void main(String[] args) {

    String s = "135598877.50";

    Float f = Float.parseFloat(s);

    DecimalFormat df = new DecimalFormat("#0.00");

    System.out.println(f);
    System.out.println(df.format(f));

}

}

OUTPUT:

1.3559888E8

135598880.00

Вывод этой программы 135598880.00, а не 135598877.50.

Почему это происходит и как лучше всего с этим справиться? Я вообще не хочу усечения / округления.

С уважением, Kaddy

Ответы [ 3 ]

4 голосов
/ 27 января 2012

float сохраняются с использованием IEE 754 .Они не могут точно хранить большие числа.

Как вы намекали в вопросе, вам нужно использовать BigDecimal.

1 голос
/ 27 января 2012

Попробуйте использовать Double вместо Float.

import java.text.DecimalFormat;

public class Doubler {
    public static void main(String[] args) {
        String        s  = "135598877.50";
        Double        f  = Double.parseDouble(s);
        DecimalFormat df = new DecimalFormat("#0.00");

        System.out.println(f);
        System.out.println(df.format(f));    
    }
}

который выводит:

1.355988775E8
135598877.50
0 голосов
/ 27 января 2012

Похоже, у вас было правильное представление об использовании BigDecimal, это работает как должно;

import java.math.BigDecimal;
import java.text.DecimalFormat;

public class testConversion {

    public static void main(String[] args) {

        String s = "135598877.50";

        BigDecimal f = new BigDecimal(s);

        DecimalFormat df = new DecimalFormat("#0.00");

        System.out.println(f);
        System.out.println(df.format(f));

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...