2012-01-27 5 views
2

float変数に格納しようとしているときに、javaで大きな数字に問題があります。大きな番号を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です。

なぜこのことが起こっているのか、これを処理する最良の方法は何ですか?私は切り捨て/丸めを全く望んでいません。

よろしく、

答えて

4

float S KaddyはIEE 754を使用して格納されています。彼らは正確に大きな数を格納することはできません。

あなたが質問した通り、BigDecimalを使用する必要があります。

+0

感謝を。私は浮動小数点からBigDecimalに移動しています – Kaddy

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)); 

    } 

} 
1

FloatではなくDoubleを使用してください。

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 
関連する問題