【问题标题】:Invalid float after new Decimal Format新十进制格式后的无效浮点数
【发布时间】:2016-05-03 18:36:27
【问题描述】:

用户想从 EditText "set_temp" 中提高温度。 Currtemp 是全局字符串,表示当前温度

float temp = Float.parseFloat(set_temp.getText().toString());
temp-=0.1;
currTemp=new DecimalFormat("#0.0").format(temp);
set_temp.setText(currTemp);

在此之后我在 logcat 中出现错误

FATAL EXCEPTION: main
Process: ru.unn.caminlab, PID: 7835
java.lang.NumberFormatException: Invalid float: "49,9"

// 但是为什么呢?

【问题讨论】:

  • , 逗号而不是 . 句号可能
  • 具有讽刺意味的是,答案只比他的问题高出一行:(
  • @svarog 我假设它来自用户输入,因为没有其他东西会产生逗号。阅读日志是一项有用的技能。 stackoverflow.com/questions/6065258/how-to-interpret-logcat
  • set_temp.getText().toString() 是罪魁祸首,他至少应该抓住异常并继续前进

标签: java android floating-point decimal


【解决方案1】:

您正在解析一个包含无效十进制格式的文本字段。

 float temp = Float.parseFloat(set_temp.getText().toString());

您的set_temp 字段包含"49,9",而它应该是"49.9"

我假设他们可以在该字段中输入内容。您需要将其限制为仅数字字段。不是纯文本。 (摆脱, 输入)

将此添加到该字段的 xml 中:

android:inputType="numberDecimal"

【讨论】:

  • android:inputType="numberDecimal" 不能解决问题。 DecimalFormat 是 (0.0) 但在我的字段中有 0,0 之后...
【解决方案2】:

1) 检查用户是否具有美国英语语言环境,在许多情况下,用户可能包含特定语言的浮点文字。

2) 从 Float.parseFloat() 中删除 set_temp.getText().toString() 并检查 set_temp.getText().toString() 是否返回正确的数字字符串文字,然后将其传递给 parseInt()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多