数字、货币与单位格式
['number-format', number, options] 返回普通字符串,可用于文字标签、筛选、concat、format、let/var。共同能力标识 commonNumberFormat 对应本页明确范围。
支持 locale、currency、unit、min-fraction-digits、max-fraction-digits 五项标准选项,选项值可为表达式。数字输入须为有限数;小数位须为 0..100 整数,最小值不得超过最大值。currency 与 unit 互斥,未知选项明确报错。
import { map } from 'sqsmap';
map.addSource('values', { type: 'geojson', data: {
type: 'Feature', id: 7, properties: { amount: 1234.5678 },
geometry: { type: 'Point', coordinates: [116.4, 39.9] }
} });
map.addLayer({ id: 'amounts', type: 'symbol', source: 'values', layout: {
'text-field': ['number-format', ['get', 'amount'], {
locale: 'zh-CN', currency: 'CNY',
'min-fraction-digits': 2, 'max-fraction-digits': 2
}],
'text-size': 20
} });
map.jumpTo({ center: [116.4, 39.9], zoom: 12 });
await map.sqs.flush();
当前支持 en-US、zh-CN、de-DE、fr-FR、ja-JP,大小写等价;省略 locale 固定使用 en-US,保证原生和 WASM 结果一致,不读取操作系统或浏览器语言。其他语言或 Unicode 扩展明确报能力不可用,不能当作所有 Intl 语言均已支持。
货币代码接受三个 ASCII 字母并转为大写。使用固定 CLDR 的符号、位置、间隔和货币小数位;合法未知代码使用代码自身和默认两位小数。单位支持 45 个 ECMA-402 sanctioned 单项及两个单项的 -per- 组合,使用短名称和当前格式化数值的复数形式。十进制默认最多三位;货币按其小数位默认,单独设置最小或最大小数位会按标准补齐另一侧默认值。保留负零并执行十进制舍入、进位、分组和补零。
数据固定为 CLDR 48.2.0,由共同 Rust 实现格式化;不依赖 JavaScript Intl、系统区域或在线服务。来源 SHA 和完整 Unicode 许可随 SDK 分发。MapLibre number-format 规范是语法参考;本项目独立实现核心逻辑。
复制共同脚本 portable-number-format.js,或运行完整网页。同一脚本精确比较五语言的数字/货币/单位输出、动态选项和失败原子性,并显示实际数字标签。其他语言、collator、复杂文字整形和设备/正式发行仍在任务清单中待完成。
单位 percent-per-X 按参考 Intl 行为显示百分号而不显示分母;仍验证 X 是有效单项,不乘 100,也不做物理单位换算。