处理Java中的大号问题

时间:2012-01-27 05:39:47

标签: java

我在尝试将它们存储在float变量中时遇到了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 个答案:

答案 0 :(得分:4)

使用IEE 754存储

float。它们无法准确存储大量数据。

正如您在问题中暗示的那样,您需要使用BigDecimal

答案 1 :(得分:1)

尝试使用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

答案 2 :(得分:0)

看起来你对使用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));

    }

}