我在欧洲(西班牙/德国)的用户以某种方式在他们的数据输入中获取逗号。拥有超过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个测试设备中重现该问题。
有什么想法吗?
答案 0 :(得分:2)
可能与用户默认语言环境有关。在Locale
的文档中,有一个标记为Be wary of the default locale
的小节,其中一部分内容为:
例如,如果您要格式化整数,则会使用某些区域设置 非ASCII十进制数字。另一个例子,如果您正在格式化 浮点数一些语言环境将使用','作为小数点 和'。'用于数字分组。
您只使用一种模式创建DecimalFormat
对象,documentation表示它使用用户默认的区域设置。
您可以使用NumberFormat.getCurrencyInstance(Locale)
静态方法(不推荐)强制使用区域设置,也可以为其他区域设置提供支持(推荐)。