在函数中解析一个浮点数并 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
另外,使用NumberFormat
class的用意似乎是为了设置小数位。使用 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);
}
即便如此,给定的方法做的不止一件事
- 将华氏度转换为摄氏度
- 格式化结果值
最好 return 计算出的值,并仅在 displaying/printing 结果时才应用格式。
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 浮动试试这个:
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
另外,使用NumberFormat
class的用意似乎是为了设置小数位。使用 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);
}
即便如此,给定的方法做的不止一件事
- 将华氏度转换为摄氏度
- 格式化结果值
最好 return 计算出的值,并仅在 displaying/printing 结果时才应用格式。