Android Java - 在欧洲和其他国家/地区使用逗号而不是句点自动表示浮动

时间:2012-10-05 18:28:22

标签: java android internationalization floating-point

欧洲小数公约似乎使用逗号(,)而不是句点(。)。这是否意味着浮标可能(自动)在欧盟和其他国家/地区以“3,1415 ......”形式出现?

那就是......如果我打电话给Float.toString(motionEvent.getX()),我可能会得到215,35而不是215.35(屏幕中间某处)?

2 个答案:

答案 0 :(得分:3)

Float.toString()不使用文化,不 - 格式是固定的。有关详细信息,请参阅文档,包括:

  

如果m小于10-3或大于或等于107,则表示为所谓的“计算机化科学记数法”。设n是唯一的整数,使得10n≤m<1。 10N + 1;然后将a设为m和10n的数学上精确的商,使1≤a<1。 10.然后将幅度表示为a的整数部分,作为单个十进制数字,后跟“。”。 ('\ u002E'),后跟表示a的小数部分的十进制数字,后跟字母'E'('\ u0045'),后跟n表示十进制整数,由Integer方法生成。的toString(INT)。   m或a的小数部分必须打印多少位?必须至少有一个数字来表示小数部分,并且除此之外必须为m

如果您使用DecimalFormat之类的内容以及欧洲语言环境的默认设置,则 会使用逗号。

答案 1 :(得分:0)

这个问题是“locale”(如何打印出float的文本表示,而不是float本身的值)。

是的,AFAIK,欧洲语言环境支持“,”而不是“。”:

        

常见的错误是隐式使用默认语言环境   产生输出意味着机器可读。这往往会起作用   开发人员的测试设备(特别是因为很多开发人员   使用en_US),但在用户所在的设备上运行时会失败   复杂的语言环境。

     

例如,如果您要格式化整数,则会使用某些区域设置   非ASCII十进制数字。另一个例子,如果您正在格式化   浮点数一些语言环境将使用','作为小数点   和'。'用于数字分组。这对于人类可读的输出是正确的,   但如果出现在另一台计算机上,可能会引起问题   (例如,parseDouble(String)无法解析这样的数字)。您   还应该警惕toLowerCase()和toUpperCase()重载   不采用区域设置

附录:

换句话说,某些API是区域设置感知的,而其他API则不是。一个令人讨厌的副作用是某些代码可能出现,以便在配置为一个区域设置的手机上正常工作,并在配置为不同区域设置的手机上失败(甚至崩溃!)。 / p>

诀窍是要了解这个问题,并熟悉哪些API是,但不是,区域设置感知。

有问题的例子,“Float.toString()”,不是