本文目录导读:

这是一个关于“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 项目使用。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播