Android:数据输入中的逗号

发布于 2024-12-03 01:27:22 字数 1134 浏览 1 评论 0原文

我有欧洲(西班牙/德国)的用户,他们在数据输入中以某种方式得到逗号。拥有超过 100,000 名用户,只有欧洲的一些用户遇到了问题。我的美国或其他欧洲客户都没有报告任何问题。

一位正在提供帮助的客户已确保仅使用小数点输入数字,但我仍然遇到问题。

布局中的字段是:

<EditText
    android:id="@+id/xmlPrice"
    android:textSize="17sp"
    android:layout_height="44dp"
    android:layout_width="105dp"
    android:gravity="right"
    android:numeric="decimal"
    android:maxLength="7"
    android:inputType="phone"
    android:digits="0123456789."
    android:selectAllOnFocus="true"
    android:imeOptions="actionNext"
    android:hint="0.00" />

我的类代码如下:

 EditText etPrice ;
 etPrice = (EditText) findViewById(R.id.xmlPrice);
 String  v_price = etPrice.getText().toString().trim();

 double d_price ;
 try {
    d_price = Double.parseDouble( v_price );
 } catch(NumberFormatException ex )
 {
    d_price = -1 ;
 }
 DecimalFormat fmtval = new DecimalFormat( "0.00" );

 v_price = fmtval.format( d_price ) ;

 mDbHelper.insertRec( v_id, v_price );

当我实际获取他们的数据库的副本时,果然,数据中有逗号。 dbHelper 只是插入数据,没有额外的检查,因为前面的代码应该正确验证数据输入的正确性。

我无法在模拟器或我的 2 个测试设备中重现该问题。

有什么想法吗?

I have users in Europe (Spain/Germany) that are somehow getting commas in their data entry. With over 100,000 users, only some in Europe are having issues. None of my American or other European customers are reporting any problems.

One customer that is helping has made sure to enter the number using only a decimal point and I still have the problem.

The field in the Layout is:

<EditText
    android:id="@+id/xmlPrice"
    android:textSize="17sp"
    android:layout_height="44dp"
    android:layout_width="105dp"
    android:gravity="right"
    android:numeric="decimal"
    android:maxLength="7"
    android:inputType="phone"
    android:digits="0123456789."
    android:selectAllOnFocus="true"
    android:imeOptions="actionNext"
    android:hint="0.00" />

My class code is as follows:

 EditText etPrice ;
 etPrice = (EditText) findViewById(R.id.xmlPrice);
 String  v_price = etPrice.getText().toString().trim();

 double d_price ;
 try {
    d_price = Double.parseDouble( v_price );
 } catch(NumberFormatException ex )
 {
    d_price = -1 ;
 }
 DecimalFormat fmtval = new DecimalFormat( "0.00" );

 v_price = fmtval.format( d_price ) ;

 mDbHelper.insertRec( v_id, v_price );

When I actually get a copy of their database, sure enough, the data has commas in it. The dbHelper simply inserts the data with no additional checks, as the code upfront should properly verify correct data entry.

I cannot reproduce the problem in either the Emulator or my 2 test devices.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

2024-12-10 01:27:23

这可能与用户的默认区域设置有关。从 Locale 的文档中,有一个小节标记为 请注意默认区域设置,其中一部分内容为:

例如,如果您要格式化整数,某些语言环境将使用
非 ASCII 十进制数字。另一个例子,如果你正在格式化
浮点数 某些语言环境将使用“,”作为小数点
和 '。'用于数字分组。

您仅使用一个模式创建 DecimalFormat 对象,该模式由 文档说它使用用户的默认区域设置。

您可以使用 NumberFormat.getCurrencyInstance(Locale) 静态方法强制使用区域设置(不推荐),也可以提供对其他区域设置的支持(推荐)。

It likely has to do with the users default locale. From the documentation of Locale there is a subsection labeled Be wary of the default locale, with a portion that reads:

For example, if you're formatting integers some locales will use
non-ASCII decimal digits. As another example, if you're formatting
floating-point numbers some locales will use ',' as the decimal point
and '.' for digit grouping.

You create your DecimalFormat object using just a pattern, which by the documentation says that it uses the users default locale.

You can either force a locale, by using NumberFormat.getCurrencyInstance(Locale) static method (not recommended), or you can provide support for other locales (recommended).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文