2016-11-28 73 views
-2

我有一個四捨五入的問題。如果我查看文本,因爲它是所有關於但不適用於類型雙重轉換四捨五入的例外 - DecimalFormat

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

    private double getAc(double b, double h){ 
     double Ac = b * h; 
     Ac = Double.valueOf(df.format(Ac)); 
     return Ac; 
    } 

    Ac = getAc(0.5, 0.8); 

    System.out.println("Ac: " + Ac); 

Exception: 
Caused by: java.lang.NumberFormatException: For input string: "0,40000" 
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) 
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) 
    at java.lang.Double.parseDouble(Double.java:538) 

四捨五入至小數點後五位

+0

請上傳所有的代碼和點異常被拋出了!它看起來像你通過'0,40000'而不是'0.4000' – BrunoDM

+0

你確定你的區域設置是正確的嗎? – Compass

+3

檢查http://stackoverflow.com/questions/5054132/how-to-change-the-decimal-separator-of-decimalformat-from-comma-to-dot-point - 它似乎你認爲Java理解逗號爲小數分隔符。如果沒有一點點小推動,它不會。此外,Java編碼標準提示使用camelCase命名變量。 – Deltharis

回答

1

這是一個很好的例子(Source):

import java.text.DecimalFormat; 
import java.text.DecimalFormatSymbols; 

public class Main { 
    public static void main(String args[]) { 
    double d = 123456.789045414114; 
    DecimalFormat df = new DecimalFormat("#0.00000"); 
    DecimalFormatSymbols dfs = df.getDecimalFormatSymbols(); 

    dfs.setDecimalSeparator('.'); 
    df.setDecimalFormatSymbols(dfs); 
    System.out.println(df.format(d)); 
    } 
} 

編輯:

DecimalFormat df = new DecimalFormat("#0.00000"); 
DecimalFormatSymbols dfs = df.getDecimalFormatSymbols(); 

dfs.setDecimalSeparator('.'); 
df.setDecimalFormatSymbols(dfs); 

    private double getAc(double b, double h){ 
     double Ac = b * h; 
     Ac = Double.valueOf(df.format(Ac)); 
     return Ac; 
    } 

    Ac = getAc(0.5, 0.8); 

    System.out.println("Ac: " + Ac); 
-1

您試圖格式(0.4而不是0.4,但我會用的東西,看起來有點少哈克:)建議你:

private double getAc(double b, double h){ 
     double Ac = b * h; 
     return Double.valueOf(Math.round(100*Ac)/100); 
} 

並調整零的數量。

+0

...突然將雙倍的最大值和最小值減少100倍。請使用double.MaxValue/10調用您的方法。 –