过去,在南非销售的 Android 手机提供 English.US 和 English.UK 语言环境支持,但最近 English.ZA(南非)出现在 Android 9.0 Samsung Galaxy A10 上。
这个特殊的 Locale 显示了数字格式的不对称处理,在将 Floats 和 Doubles 转换为字符串 [*1] 时使用 Locale.DE(德语/荷兰语)约定,但在读回生成的自身相同时引发 Java.Lang.NumberFormatException字符串。例如:
// on output
Float fltNum = 1.23456F;
System.out.println(String.format(Locale.getDefault(),"%f",fltNum)); // prints '1,23456'
// on Input
String fltStr = "1,23456";
Float fltVal;
fltVal = Float(fltStr); // generates NumberFormatException
fltVal = Float.parseFloat(fltStr); // also generates NumberFormatException
// Giving the compiler Float hints fltStr = "1,23456F" does not help
// Only fltStr = '1.23456' converts into a Float.
诱惑是在读取时交换小数分隔符,但这是 Float.parseFloat() 的任务,不是程序员的任务,因为这样做会再次破坏其他 Locale.DE-likes,例如 Locale.ID (Indonesia)我的应用程序支持。
我更多地针对区域设置仲裁员的另一个问题是:English.ZA 是否暗示符合英语,就像说 German.NA(纳米比亚)符合德国一样?有人会认为这种特定数字转换的自然名称是 Dutch.ZA(俗称“南非荷兰语”),以符合荷兰语,但 Android 将其指定为 English.ZA?
注意 (*1) 此 Android English.ZA 仅部分符合,因为它不生成德语点组分隔符或本地文书(纸笔)空格字符组分隔符。