You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部分Android设备上String.format格式化数字异常?生产环境显示非阿拉伯数字

问题根源:Locale(区域设置)在搞鬼!

你遇到的这个情况不是String.format本身的bug,而是因为String.format()默认会采用设备的**默认Locale(区域设置)**来处理数字格式化——不同地区的Locale对应着不同的数字系统。

举个例子:如果用户的设备Locale设成了阿拉伯语(ar)或者其他使用阿拉伯-Indic数字的区域,%d占位符就会自动把数字转换成该Locale专属的本土数字字符(就是你看到的٠、١这类符号);而你的测试机和自己的电脑用的是中文/英文这类默认用0-9阿拉伯数字的Locale,所以一切正常。

快速解决:强制指定Locale

要让格式化后的数字始终是0-9的标准阿拉伯数字,只需要在调用String.format()时显式指定一个使用标准阿拉伯数字的Locale就行,比如Locale.US或者Locale.ROOT:

int color = 0;
int number = 0;
// 显式指定Locale,强制输出0-9的阿拉伯数字
String s = String.format(Locale.US, "%dproduct%d", color, number);

如果你需要更精细的数字格式控制,也可以用DecimalFormat来实现,效果是一样的:

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;

// ...

int color = 0;
int number = 0;
DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance(Locale.US);
DecimalFormat df = new DecimalFormat("#", symbols);
String s = df.format(color) + "product" + df.format(number);

这样不管用户设备的默认Locale是什么,最终生成的字符串都会是0product0这类符合预期的格式。

内容的提问来源于stack exchange,提问作者Winter is coming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:45:41