2012-01-27 24 views
2

我在嘗試將它們存儲在float變量中時遇到了大量java錯誤。在Java中處理Large No's

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

回答

4

float s的使用IEE 754存儲。他們不能精確存儲大量數字。

正如您在提問中所暗示的,您需要使用BigDecimal

+0

感謝您的快速回應大家。我正在從浮動移動到BigDecimal – Kaddy 2012-01-27 06:11:45

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

嘗試使用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