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
相关产品推荐
相关产品推荐

