需要更换货币缩写

时间:2020-12-25 作者:Vijay Patil

我想替换货币缩写字母表,它目前使用的是M、L等。我想更改为印度货币数字格式,如K、L和CR

以下是代码:

if(!function_exists(\'houzez_number_shorten\')) {

    function houzez_number_shorten($number, $precision = 0, $divisors = null) {
    $number = houzez_clean_price_20($number);

        if (!isset($divisors)) {
            $divisors = array(
                pow(1000, 0) => \'\', // 1000^0 == 1
                pow(1000, 1) => \'K\', // Thousand
                pow(1000, 2) => \'M\', // Million
                pow(1000, 3) => \'B\', // Billion
                pow(1000, 4) => \'T\', // Trillion
                pow(1000, 5) => \'Qa\', // Quadrillion
                pow(1000, 6) => \'Qi\', // Quintillion
            );    
        }
        
        foreach ($divisors as $divisor => $shorthand) {
            if (abs($number) < ($divisor * 1000)) {
                // Match found
                break;
            }
        }
        //Match found or not found use the last defined value for divisor
        $price = number_format($number / $divisor, 1);
        $price = str_replace(".0","",$price);
        return $price . $shorthand;
    }
}

我不擅长编码,因此任何帮助都将不胜感激

1 个回复
最合适的回答,由SO网友:Rup 整理而成

除数循环假设下一行比当前行大1000倍,因此我认为您必须更改此处的逻辑,例如,不断迭代,直到除数太大,然后使用前一行,例如。

if (!isset($divisors)) {
    $divisors = array(
        pow(10, 0) => \'\',
        pow(10, 3) => \'K\', // Thousand
        pow(10, 5) => \'L\', // Lakh
        pow(10, 7) => \'CR\', // Crore
    );
}

$divisor = 1;
$shorthand = \'\';
foreach ($divisors as $next_divisor => $next_shorthand) {
    if (abs($number) < $next_divisor) {
        // Too big; use previous row
        break;
    }
    $divisor = $next_divisor;
    $shorthand = $next_shorthand;
}
我想这就是你需要改变的全部。(我不知道你是否需要告诉number\\u格式不要使用数千,但希望它能从语言环境中获得,除非你有1000多亿欧元,否则你不会显示数千。)还请注意,现有函数未使用$precision参数。