在函数中解析一个浮点数并 return

Parsing a float and return it in a function

public static float fahrenheitEnCelsius(int f) {
    float cel = 5 / 9.0F * (f - 32);
    NumberFormat formatter = NumberFormat.getInstance(Locale.US);
    formatter.setMaximumFractionDigits(1);
    Float formatedFloat = new Float(formatter.format(cel));
    return formatedFloat;
}

我有一个函数,它接受华氏度值的整数输入和 returns 摄氏度值,逗号后只有一位小数。输入值 2006 出现此错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "1,096.7"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
at java.lang.Float.parseFloat(Float.java:451)
at java.lang.Float.<init>(Float.java:532)
at seance11mai.fahrenheitEnCelsius(seance11mai.java:42)
at seance11mai.main(seance11mai.java:47)

您可以通过将方法更改为 public static float fahrenheitEnCelsius(int f)

来更好地 return 字符串而不是浮点数

如果你真的想要 return 浮动试试这个:

public static float fahrenheitEnCelsius(int f) {
    float cel = 5 / 9.0F * (f - 32);
    NumberFormat formatter = NumberFormat.getInstance(Locale.US);
    formatter.setMaximumFractionDigits(1);
    String temp = formatter.format(cel);
    temp = temp.replaceAll("[,;\s]","");
    Float formatedFloat = new Float(temp);
    System.out.println(formatedFloat);
    return formatedFloat;
 }

你得到这个是因为提供给 Float 构造函数的字符串格式不正确。

new Float("22222.3333") //deprecated
Float.valueOf("22222.3333")  

Float class 需要 "Float format" 中的字符串,例如 -20234.23 或 34.255

您提供的是使用 Locale.US

的浮点数的本地化字符串表示形式
formatter.format(cel)     // returned actually 1,096.7  not ( 1096.7)

要将字符串“1,096.7”转换回浮点数,您可以使用

formatter.parse(aString)  // throws ParseException

所以

Float formatedFloat = new Float(formatter.format(cel));

可以替换为

Float formatedFloat = formatter.parse(formatter.format(cel));

最后一点,fahrenheitEnCelsius() 可能会返回一个不带任何小数位四舍五入的浮点数。

如果您需要 "print" 或 "display" fahrenheitEnCelsius() 那么您可以使用另一个函数来处理使用 NumberFormat 或 DecimalFormat 的格式。

希望对您有所帮助。

对于任何浮动输入,您将获得 NumberFormatException,其摄氏转换结果为 1,000 或更多。因为给定语言环境的 NumberFormat 将在输出中添加千位分隔符,并且 String 成为 Float 构造函数

的无效输入
public Float(String s) throws NumberFormatException {
        value = parseFloat(s);
    }

对于 1831 f 以下的输入没有任何异常的原因是 cel 的结果值低于 1,000

另外,使用NumberFormatclass的用意似乎是为了设置小数位。使用 String.format 可以实现相同的结果,如下所示

 public static float fahrenheitEnCelsius(int f) {
        float cel = 5 / 9.0F * (f - 32);
        String value = String.format("%.1f", cel);
        return Float.valueOf(value);
    }
即便如此,给定的方法做的不止一件事
  1. 将华氏度转换为摄氏度
  2. 格式化结果值

最好 return 计算出的值,并仅在 displaying/printing 结果时才应用格式。