Android - 无效的双“#,##”

Posted

技术标签:

【中文标题】Android - 无效的双“#,##”【英文标题】:Android - Invalid Double "#,##" 【发布时间】:2015-11-25 11:38:16 【问题描述】:

我的应用程序的用户出现错误,应用程序正在崩溃

我看过报告,上面写着

原因:java.lang.NumberFormatException: Invalid double: "1,36"

我已经复制了在我的应用中输入的数据,我完全没有问题

我什至让她把她的数据库发给我,这样我就可以导入准确的数据,而且它对我来说仍然可以正常工作

我很困惑双精度在哪里被这样格式化,因为我在我的代码中看不到它会被格式化的任何地方,

关于发生了什么有什么建议吗?

【问题讨论】:

用户是法国人吗?必须是语言环境问题 如您所见,数字 1 后面有逗号。在您的代码中,您将字符串解析为 double.user 的某些位置可能输入了 1,36 之类的数据 无效双精度:“1,36”,-> 有效双精度:“1.36” 某些语言环境使用, 作为小数分隔符。如果没有看到您的代码,就不可能说出您的值的格式是这样的。 我已经仔细检查了输入的数据,没有用户输入的数据,所以我假设它与这个语言环境有关,如果用户在不同的国家,格式会以不同的方式完成? 【参考方案1】:

简单的方法是(在你的土地上做):

if (str.contains(",")) 
    str.replace(",",".");

【讨论】:

嗨@walkmn 感谢您的建议,唯一的问题是每次解析双精度时我都必须这样做,这会有点痛苦,而且更像是一种解决方法【参考方案2】:

我刚刚遇到了同样的问题。我正在将浮点值转换为字符串。是的,这一定是语言环境问题。如其中一个 cmets 所述,某些语言环境使用 , 作为小数分隔符。 最初我正在转换浮点数-

String.format("%.1f", value);

然后我把代码改成

String.format(Locale.ENGLISH, "%.1f", value);

因此,强制将字符串转换为英语本地对我有用。

【讨论】:

【参考方案3】:

您似乎遇到了语言环境问题。不同的语言环境将., 作为小数部分分隔符。您可以使用 java.text.NumberFormat 来使用您想要的语言环境,例如FRANCE 表示逗号,US 表示点:

// somewhere at Utils.java:

public static final NumberFormat DOUBLE_FORMAT = NumberFormat.getInstance(Locale.FRANCE);

// at call site:

double d = Utils.DOUBLE_FORMAT.parse("1,234").doubleValue();

【讨论】:

以上是关于Android - 无效的双“#,##”的主要内容,如果未能解决你的问题,请参考以下文章

我的Android进阶之旅解决Android Studio报错:发现了以元素 ‘base-extension‘ 开头的无效内容。应以 ‘{layoutlib}‘ 之一开头。

java.lang.NumberFormatException:无效的双精度:“”在 java.lang.StringToReal.invalidReal

我的 Android 小部件被杀死,“不再需要 bellander.andro ....”

如何解决这个错误。 com.google.android.gms.tasks.task executors$zza 无法转换为 android.app.activity。我是 Java 和 Andro

gitlab的无效双因素代码

Android上的双文本TextViews [重复]