PHP项目数字卢旺达法郎与eRWF

wen PHP项目 1

本文目录导读:

PHP项目数字卢旺达法郎与eRWF

  1. 需求说明
  2. PHP实现代码
  3. 进阶:货币转换与单位(例如 RWF → eRWF 按汇率折算)
  4. 完整的PHP工具类(推荐用于项目)
  5. 数据库 / API 最佳实践
  6. 注意事项

这是一个关于“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

注意事项

  • 输入清洗:用户输入可能包含 FrwRWF、空格等,先清洗再处理。
  • 精度:PHP float 存在精度问题,金融场景建议用 bcmathint(储值为分)。
    // 用整数分来存储(推荐)
    $amountInCents = 150050; // 1500.50 RWF
  • 国际化:根据卢旺达标准(Kinyarwanda/法语),使用点()千分位、逗号()小数。
  • eRWF标识:若为电子卢旺达法郎(央行数字货币),通常写作 eRWF,代码为 RWF 不变,但需要额外标记。

如果你需要 eRWF的智能合约对接BCH格式转换前端显示组件,可以进一步补充说明。
上面代码可直接放入你的 PHP 项目使用。

抱歉,评论功能暂时关闭!