本文目录导读:

在PHP项目中,处理“数字毛里塔尼亚乌吉亚”(MRO)及其新货币单位“eMRU”时,需要注意以下关键点:
货币背景
- 毛里塔尼亚乌吉亚(MRO):旧货币代码,1 MRO ≈ 1/5 新乌吉亚。
- eMRU(新乌吉亚):2018年货币改革后的新代码,1 eMRU = 5 MRO(实际兑换比例)。
💡 注意:国际标准代码为 MRU(非eMRU),但部分系统可能用eMRU作为过渡表示。
PHP实现建议
a. 货币格式处理
使用 NumberFormatter 进行本地化格式化:
$amount = 1234.56;
$formatter = new NumberFormatter('ar_MR', NumberFormatter::CURRENCY);
echo $formatter->formatCurrency($amount, 'MRU'); // 输出类似 "١٬٢٣٤٫٥٦ MRU"
b. 转换逻辑
若需要兼容旧数据(MRO),需添加转换函数:
function convertMroToMru(float $mroAmount): float {
return $mroAmount / 5; // 1 MRU = 5 MRO
}
function convertMruToMro(float $mruAmount): float {
return $mruAmount * 5;
}
c. 数据库存储建议
- 统一使用 MRU 作为货币代码,避免混合新旧代码。
- 使用
DECIMAL(12,2)存储金额(支持小数点后2位,乌吉亚最小单位为1/5 khoums,但实务中常简化为2位小数)。
注意事项
- 货币代码选择:优先使用国际标准 MRU(ISO 4217),避免自定义代码(如eMRU)导致第三方API兼容问题。
- 汇率风险:新旧货币转换需明确比例(1:5),并保留历史记录以便审计。
- 本地化字符串:毛里塔尼亚的阿拉伯语区域可能需使用
ar_MR语言环境,数字显示为阿拉伯-印度数字(如 ١,٢٣٤.٥٦)。
示例完整类
class MauritaniaCurrency {
const OLD_CODE = 'MRO';
const NEW_CODE = 'MRU'; // 标准ISO代码
public static function convert(int|float $amount, string $from, string $to): float {
if ($from === self::OLD_CODE && $to === self::NEW_CODE) {
return $amount / 5;
} elseif ($from === self::NEW_CODE && $to === self::OLD_CODE) {
return $amount * 5;
}
throw new InvalidArgumentException("不支持 {$from} 到 {$to} 的转换");
}
public static function format(float $amount, string $locale = 'ar_MR'): string {
$fmt = new NumberFormatter($locale, NumberFormatter::CURRENCY);
return $fmt->formatCurrency($amount, self::NEW_CODE);
}
}
扩展库推荐
- brick/money:支持货币计算和单位转换。
- moneyphp/money:处理货币舍入规范(如乌吉亚无分币单位,但实务中可省略)。
关键提醒
- 测试:模拟新旧货币混合数据,验证转换逻辑是否按官方比例(1:5)执行。
- 合规性:确保符合毛里塔尼亚中央银行最新货币规定(如是否还有MRO流通)。
通过以上方法,可在PHP项目中安全地处理数字毛里塔尼亚乌吉亚及其新单位。