You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java NumberFormatException异常求助:输入字符串"-5,25"无法解析

解决java.lang.NumberFormatException: For input string: "-5,25"问题

你遇到的这个异常根源很明确:区域设置(Locale)导致的小数点分隔符差异。

问题分析

你的代码里做了一个完全多余的操作:把double类型的temp转成字符串,再转回float。而String.format("%.2f", temp)默认会使用当前系统的区域格式生成字符串——如果你的系统区域是欧洲这类用逗号,作为小数点分隔符的地区,生成的字符串就会是"-5,25",但Float.parseFloat()只认英文格式的点.作为小数点,自然就抛出了解析异常。

修复方案

方案1:直接跳过字符串转换(推荐)

既然最终目标是得到float类型的值,完全没必要绕字符串这一圈,直接把double强转成float即可,既高效又避免了区域问题:

private void setDepth(GL10 gl){ 
    float max = -5.25f; 
    float min = -6.25f; 
    float A = (max - min) / 2; 
    float z; 
    double temp = A * -Math.abs(Math.sin(2 * (Math.round(angleRectangle) * Math.PI / 180))) + max; 
    // 直接强转,去掉多余的字符串转换步骤
    z = (float) temp; 
    depth = z; 
}

方案2:强制指定区域格式(如果确实需要格式化字符串)

如果业务逻辑要求必须保留两位小数的格式化操作,那就在String.format里指定英文区域,强制用点.作为小数点分隔符:

import java.util.Locale;

private void setDepth(GL10 gl){ 
    float max = -5.25f; 
    float min = -6.25f; 
    float A = (max - min) / 2; 
    float z; 
    double temp = A * -Math.abs(Math.sin(2 * (Math.round(angleRectangle) * Math.PI / 180))) + max; 
    // 指定Locale.US,确保生成的字符串用点作为小数点
    String s = String.format(Locale.US, "%.2f", temp).trim(); 
    z = Float.parseFloat(s); 
    depth = z; 
}

额外提醒

尽量避免这种「数值转字符串再转回数值」的无意义操作,除了容易踩区域格式的坑,还会额外消耗性能。直接的类型转换才是最安全高效的选择。

内容的提问来源于stack exchange,提问作者user9615087

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:51:40