簡體   English   中英

NumberFormatException:對於輸入字符串:“5,2”

[英]NumberFormatException: For input string: “5,2”

請幫我解決這個問題。 我在這里添加代碼片段和崩潰日志。

碼:

if (rssi <= -30 && rssi >= -90) {
    double len = ((rssi + 20) * -1) / 10.0;
    DecimalFormat decimalFormat = new DecimalFormat("#.##");
    float twoDigitsF = Float.valueOf(decimalFormat.format(len));
    return String.valueOf(twoDigitsF);
}

我在線上得到例外

float twoDigitsF = Float.valueOf(decimalFormat.format(len));

我在這里附上我的日志

Fatal Exception: java.lang.NumberFormatException: For input string: "5,2"
       at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1306)
       at java.lang.Float.valueOf(Float.java:424)
       at com.app.package.utils.Util.getRange(Util.java:26)
       at com.app.package.DriverActivity.scanDone(SampleActivity.java:982)
       at com.app.package.DriverActivity.access$1300(SampleActivity.java:126)
       at com.app.package.DriverActivity$11.onScanned(SampleActivity.java:913)
       at com.appchannel.bluetooth.BHelper$1.run(BHelper.java:67)
       at android.os.Handler.handleCallback(Handler.java:751)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:154)
       at android.app.ActivityThread.main(ActivityThread.java:6317)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)

我從Crashlytics得到了這個日志。 我無法在設備上重現此問題。

根據您的語言環境設置的內容,十進制數的整數部分和小數部分之間的字符可以是. , ,或別的東西,我是不知道的。

DecimalFormat自動使用與您的語言環境對應的字符,這就是為什么它格式化為5,2而不是5.2

但是, valueOf不考慮區域設置。 它尋找. 作為分隔符。 因此,通過in there,放置5,2 in there, valueOf`無法識別它。

要強制十進制格式進行格式化以使結果與valueOf兼容,請嘗試使用以下方法創建DecimalFormat

new DecimalFormat("#.##", DecimalFormatSymbols.getInstance(Locale.US));

編輯:

我看到你再次將浮動轉換回字符串並返回它。 你為什么不直接返回format的返回值?

return decimalFormat.format(len);

5,2不是double或float值,所以你應該過濾錯誤值! 設置textview輸入類型!

無需使用十進制格式。

yourfloat*=100f;
yourfloat = Math.round(yourfloat);
yourfloat =  yourfloat/100f;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM