欧洲小数公约似乎使用逗号(,)而不是句点(。)。这是否意味着浮标可能(自动)在欧盟和其他国家/地区以“3,1415 ......”形式出现?
那就是......如果我打电话给Float.toString(motionEvent.getX())
,我可能会得到215,35而不是215.35(屏幕中间某处)?
答案 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()”,不是。