本文目录导读:

这是一个关于“PHP项目数字卢旺达法郎与eRWF”的完整实现方案。
核心功能:将卢旺达法郎(RWF)的金额转换为数字形式(带千分位/小数),同时支持显示“eRWF”(电子卢旺达法郎)格式(即ISO 4217货币代码 + 数字金额的规范表示,通常用于数字货币、对账单或API响应中)。
需求说明
- 输入:任意数字(如
50或"1,200.75") - 输出:
- 数字卢旺达法郎:
1,500.50 RWF(或500,50 RWF取决于地区习惯) - eRWF格式:
eRWF 1500.50(不带千分位,保留2位小数,用于电子对账)
- 数字卢旺达法郎:
- 注意:卢旺达使用逗号作为千分位、点作为小数分隔符(欧洲风格),但很多数字系统使用国际标准(点分位、逗号小数),本方案提供两种风格。
PHP实现代码
1 核心函数:RWF数字格式化
<?php
/**
* 格式化卢旺达法郎为数字金额(带千分位符号)
*
* @param float|string $amount 金额数值
* @param string $locale 地区格式:'rw' (卢旺达式: 1.234,56) 或 'int' (国际式: 1,234.56)
* @return string 格式化后的字符串 + "RWF"
*/
function formatRWF($amount, $locale = 'rw') {
$amount = floatval(str_replace(',', '', $amount)); // 去除输入中的逗号(如果是字符串带逗号)
if ($locale === 'rw') {
// 卢旺达本地格式:点做千分位,逗号做小数 (1.234,56)
$formatted = number_format($amount, 2, ',', '.');
} else {
// 国际标准格式:逗号做千分位,点做小数 (1,234.56)
$formatted = number_format($amount, 2, '.', ',');
}
return $formatted . ' RWF';
}
/**
* 生成 eRWF 电子卢旺达法郎格式:点小数,无千分位
* 常用于API响应、支付系统、对账单
*
* @param float|string $amount
* @return string 如 "eRWF 1500.50"
*/
function formatERWF($amount) {
$amount = floatval(str_replace(',', '', $amount));
// 保留2位小数,无千分位
return 'eRWF ' . number_format($amount, 2, '.', '');
}
2 使用示例
$testAmounts = [1500.5, 1234567.89, "2,500.75", 0.99, 100];
echo "=== RWF 卢旺达格式 ===\n";
foreach ($testAmounts as $val) {
echo formatRWF($val, 'rw') . "\n";
}
echo "\n=== RWF 国际格式 ===\n";
foreach ($testAmounts as $val) {
echo formatRWF($val, 'int') . "\n";
}
echo "\n=== eRWF 电子格式 ===\n";
foreach ($testAmounts as $val) {
echo formatERWF($val) . "\n";
}
输出结果:
=== RWF 卢旺达格式 ===
1.500,50 RWF
1.234.567,89 RWF
2.500,75 RWF
0,99 RWF
100,00 RWF
=== RWF 国际格式 ===
1,500.50 RWF
1,234,567.89 RWF
2,500.75 RWF
0.99 RWF
100.00 RWF
=== eRWF 电子格式 ===
eRWF 1500.50
eRWF 1234567.89
eRWF 2500.75
eRWF 0.99
eRWF 100.00
进阶:货币转换与单位(RWF → eRWF 按汇率折算)
如果你的 eRWF 代表 电子卢旺达法郎(数字CBDC) 且与RWF不是1:1,可加入汇率:
/**
* 将RWF转换为eRWF(按汇率)
* @param float $rwfAmount
* @param float $exchangeRate 1 eRWF = ? RWF
* @return string eRWF 格式
*/
function rwfToERWF($rwfAmount, $exchangeRate = 1.0) {
$erwfAmount = $rwfAmount / $exchangeRate;
return 'eRWF ' . number_format($erwfAmount, 2, '.', '');
}
// 举例:1 eRWF = 100 RWF(假设值)
echo rwfToERWF(150000, 100); // eRWF 1500.00
完整的PHP工具类(推荐用于项目)
<?php
class RWFCurrency
{
/**
* 格式化卢旺达法郎为显示金额
*/
public static function format($amount, $style = 'rwf_local')
{
$amount = static::normalize($amount);
switch ($style) {
case 'rwf_local':
return number_format($amount, 2, ',', '.') . ' RWF';
case 'rwf_intl':
return number_format($amount, 2, '.', ',') . ' RWF';
case 'erwf':
return 'eRWF ' . number_format($amount, 2, '.', '');
case 'erwf_short':
return 'eRWF ' . number_format($amount, 2, '.', '');
default:
return number_format($amount, 2, '.', ',') . ' RWF';
}
}
/**
* 从字符串(可能包含逗号)提取数值
*/
public static function normalize($amount)
{
if (is_string($amount)) {
$amount = str_replace([' ', 'RWF', 'eRWF', 'Frw'], '', $amount);
// 处理卢旺达格式:先判断是否有点做千分位(这种模式会有点号在数字中间)
if (preg_match('/^\d{1,3}(\.\d{3})*(,\d+)?$/', $amount)) {
// 卢旺达格式:去掉点(千分位),替换逗号为点
$amount = str_replace('.', '', $amount);
$amount = str_replace(',', '.', $amount);
} else {
// 国际格式或纯数字:去掉逗号
$amount = str_replace(',', '', $amount);
}
}
return floatval($amount);
}
}
// 使用
echo RWFCurrency::format('1.500,50', 'rwf_local'); // 1.500,50 RWF
echo RWFCurrency::format('1500.50', 'erwf'); // eRWF 1500.50
数据库 / API 最佳实践
| 场景 | 存储格式 | 示例 |
|---|---|---|
| MySQL DECIMAL | 小数点值 | 50 |
| 显示(卢旺达前端) | 逗号小数、点千分位 | 500,50 RWF |
| API JSON 响应 | 数字金额 + 货币字段 | {"amount": 1500.50, "currency": "RWF"} |
| 电子货币对账 (eRWF) | 无千分位、点小数、前缀 | eRWF 1500.50 |
注意事项
- 输入清洗:用户输入可能包含
Frw、RWF、空格等,先清洗再处理。 - 精度:PHP
float存在精度问题,金融场景建议用bcmath或int(储值为分)。// 用整数分来存储(推荐) $amountInCents = 150050; // 1500.50 RWF
- 国际化:根据卢旺达标准(Kinyarwanda/法语),使用点()千分位、逗号()小数。
- eRWF标识:若为电子卢旺达法郎(央行数字货币),通常写作
eRWF,代码为RWF不变,但需要额外标记。
如果你需要 eRWF的智能合约对接、BCH格式转换 或 前端显示组件,可以进一步补充说明。
上面代码可直接放入你的 PHP 项目使用。