欧洲的小数惯例似乎使用逗号 (,) 而不是句点 (.)。这是否意味着浮动可能(自动)在欧盟和其他有此公约的国家/地区出现“3,1415 ...”?
也就是说...如果我打电话给Float.toString(motionEvent.getX())
,我可能会得到 215,35 而不是 215.35 (在屏幕中间的某个地方)?
欧洲的小数惯例似乎使用逗号 (,) 而不是句点 (.)。这是否意味着浮动可能(自动)在欧盟和其他有此公约的国家/地区出现“3,1415 ...”?
也就是说...如果我打电话给Float.toString(motionEvent.getX())
,我可能会得到 215,35 而不是 215.35 (在屏幕中间的某个地方)?
Float.toString()
不使用文化,不 - 格式是固定的。有关详细信息,请参阅文档,包括:
如果 m 小于 10-3 或大于或等于 107,则它以所谓的“计算机科学计数法”表示。令 n 为唯一整数,使得 10n ≤ m < 10n+1;然后让 a 是 m 和 10n 的数学精确商,使得 1 ≤ a < 10。然后将大小表示为 a 的整数部分,作为一个十进制数字,后跟“。” ('\u002E'),后跟表示 a 小数部分的十进制数字,然后是字母 'E' ('\u0045'),然后是 n 表示为十进制整数,由 Integer 方法生成。到字符串(整数)。m 或 a 的小数部分必须打印多少位?必须至少有一个数字来表示小数部分,超过这个数字是 m
如果您使用诸如欧洲语言环境的默认设置之类的东西,它将使用逗号。DecimalFormat
这个问题是“语言环境”(如何打印出浮点的文本表示,而不是浮点本身的值)。
是的,AFAIK,欧洲语言环境支持“,”而不是“。”:
一个常见的错误是在生成机器可读的输出时隐式使用默认语言环境。这往往适用于开发人员的测试设备(特别是因为许多开发人员使用 en_US),但在用户处于更复杂区域设置的设备上运行时会失败。
例如,如果您正在格式化整数,则某些语言环境将使用非 ASCII 十进制数字。再举一个例子,如果您正在格式化浮点数,某些语言环境将使用 ',' 作为小数点和 '.' 用于数字分组。这对于人类可读的输出是正确的,但如果呈现给另一台计算机可能会导致问题(例如,parseDouble(String) 无法解析这样的数字)。您还应该警惕不采用 Locale 的 toLowerCase() 和 toUpperCase() 重载
附录:
换句话说,有些 API 是区域感知的,而有些则不是。一个令人讨厌的副作用是,某些代码可能会在恰好配置为一种语言环境的手机上正常工作,而在配置为不同语言环境的手机上可能会失败(甚至崩溃!)。
诀窍是要意识到这个问题,并熟悉哪些 API 是区域感知的,哪些不是区域感知的。
有问题的示例“Float.toString()”不是.