Heim >Backend-Entwicklung >PHP-Problem >So konvertieren Sie PHP-Zahlen in chinesische Schriftzeichen

So konvertieren Sie PHP-Zahlen in chinesische Schriftzeichen

PHPz
PHPzOriginal
2023-04-18 09:47:261707Durchsuche

Bei der Entwicklung eines digitalen Systems ist es unumgänglich, Zahlen in chinesische Schriftzeichen umzuwandeln. Im Finanzsystem werden beispielsweise digitale Beträge in chinesische Großbuchstaben umgewandelt, um den Betrag einfacher und klarer auszudrücken. Als beliebte Webentwicklungssprache ist PHP mit seinen integrierten Funktionsbibliotheken und Erweiterungen in der Lage, dieser Nachfrage gerecht zu werden.

Dieser Artikel führt den Leser in die Implementierung der Konvertierung numerischer Werte in chinesische Schriftzeichen ein, einschließlich einiger gängiger Algorithmen und Funktionsbibliotheken. Ich hoffe, dass es Entwicklern dabei helfen kann, die Funktion der Konvertierung von Zahlen in chinesische Schriftzeichen in ihren eigenen Projekten zu erkennen.

1. Grundlegender numerischer Konvertierungsalgorithmus für chinesische Schriftzeichen

Die einfachste Methode besteht darin, die Zahlen auf der linken Seite der Zahl in Gruppen von vier Zahlen zu unterteilen, und die maximale Gruppierungseinheit beträgt zehntausend oder Milliarden Ebenen. Die numerischen Werte in jeder Gruppe werden durch einen Algorithmus in entsprechende chinesische Schriftzeichenausdrücke umgewandelt, und dann können die chinesischen Schriftzeichen dieser Zahlen zusammengefügt werden. Daher müssen wir zunächst die Beziehung zwischen Zahlen und chinesischen Schriftzeichen definieren:

Zahlen 0–9: null, eins, zwei, drei, vier, fünf, sechs, sieben, acht, neun
Zahlen 10–19: zehn, elf , Zwölf,..., achtzehn, neunzehn
Zahlen 20~90 (Schrittweite ist 10): zwanzig, dreißig,..., achtzig, neunzig
Zahl 100: einhundert
Zahl 1000: eintausend
Zahl 10000: zehn Tausend
Zahl 100000000: einhundert Millionen

Gruppieren Sie dann die Werte, die Sie konvertieren möchten (die maximale Einheit kann nach Bedarf angepasst werden) und konvertieren Sie die Werte in jeder Gruppe gemäß den folgenden Regeln:

  1. Wenn die Zahl 0 ist, geben Sie direkt „Null“ aus.
  2. Wenn die Zahl größer oder gleich 10, aber kleiner als 20 ist, geben Sie sie im Format „Zehner“ aus (z. B. „elf“, „zwölf“). .“neunzehn“)
  3. Wenn die Zahl größer als gleich 20 ist, konvertieren Sie sie in das Format „zehn“. Werte unter Hunderten werden rekursiv verarbeitet
  4. Wenn die Zahl größer oder gleich 1000 ist, wird sie in konvertiert Das Format „X Tausend“ wird ausgegeben und Werte unter Tausend werden rekursiv verarbeitet
  5. Wenn die Zahl größer oder gleich 10000 ist, wird sie in das Format „X Tausend“ konvertiert. Ausgabe und Verarbeitung der letzten vier Ziffern rekursiv
  6. Wenn die Zahl größer oder gleich 100000000 ist, konvertieren Sie sie in das Format „{
  7. $chnnum = '';
    $unit = array('','十','百','千','万','十','百','千','亿','十','百','千','兆');
    $datacn = array('零','一','二','三','四','五','六','七','八','九');
    $sign = $num < 0 ? &#39;负&#39; : &#39;&#39;;
    $num = abs($num);
    $numstr = strval($num);      
    $alen = strlen($numstr);
    $pos = $alen - 1;
    $lastunit = true;
    for ($i = 0; $i < $alen; $i++) {
        $curidx = intval($numstr[$i]);
        $curunit = $unit[$pos];
        if ($curidx > 0) {
            $chnnum .= $datacn[$curidx] . $curunit;
            $lastunit = true;
        } 
        else if (!$lastunit) {
            $chnnum .= $datacn[$curidx];
            $lastunit = true;
        }
        if ($pos == 4 && ($lastunit || $curidx)) {
            $chnnum .= '万';
        } 
        else if ($pos == 8 && ($lastunit || $curidx)) {
            $chnnum .= '亿';
        }
        $pos--;
    }
    if (!$chnnum) {
        $chnnum .= '零';
    }
    $chnnum = $sign . $chnnum;
    return $chnnum;
  8. }
Dieser Algorithmus übernimmt die Idee der Gruppierung und schrittweisen Konvertierung und verarbeitet jede Ziffer in Drehen Sie sich entsprechend der Anzahl der Ziffern im Wert um und konvertieren Sie die Zahl in die Darstellung chinesischer Schriftzeichen. Es ist zu beachten, dass die Behandlung von Nullen eine spezielle Verarbeitung erfordert und die Ausgabe am Ende sichergestellt ist.

2. Konvertierung zwischen anderen Werten und chinesischen Schriftzeichen

In PHP müssen Sie möglicherweise auch Werte wie Beträge in standardisierte chinesische Schriftzeichen umwandeln, z. B. „zehntausend, dreihundertzwanzig“. Yuan“ oder konvertieren Sie chinesische Beträge in eine numerische Darstellung. Hier stellen wir ein relativ vollständiges Konvertierungsschema zwischen numerischen Werten und chinesischen Schriftzeichen vor.

(1) Konvertieren Sie numerische Werte in chinesische Schriftzeichenausdrücke

Dieser Algorithmus wandelt numerische Werte durch Schleifenrekursion in chinesische Schriftzeichen um, die zur Darstellung von Beträgen in chinesischen Großbuchstaben verwendet werden können. Der Wert wird in einen ganzzahligen Teil und einen dezimalen Teil unterteilt. Der ganzzahlige Teil verwendet eine Logik, die der des Grundalgorithmus ähnelt, und der Dezimalteil wird für jede Ziffer von links nach rechts umgewandelt.

function numtochn($num) {

$chncharacters = array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖");
$chnunits = array("", "拾", "佰", "仟", "万", "亿");
$level = array("", "万", "亿");
list($numInteger, $numDecimal) = explode(".", $num);
$integerStr = strrev($numInteger);   
$len = strlen($integerStr);        
$dwNum = 0;                         
$numAnsStr = sprintf("%s整", $level[0]); 

for ($i = 0;$i < $len; $i++) {     
    $tmpStr = &#39;&#39;;
    $perChar = substr($integerStr, $i, 1);
    $perInt = intval($perChar);
    if ($perInt == 0) {
        if ($i % 4 == 0) {
            $dwNum ++;
        }
        if ($dwNum > 0 && $dwNum % 2 == 0) {
            $tmpStr = $level[$dwNum / 2];
        }
        if ($i == $len - 1 || $i % 4 == 3) {
            $tmpStr .= $chnunits[4 + (($i + 1) % 4)];
            $dwNum = 0;
        }
        $numAnsStr = $tmpStr . $numAnsStr;
        continue;
    }
    $tmpStr = $chncharacters[$perInt];
    $tmpStr .= $chnunits[$i % 4]; 
    if ($i % 4 == 3) {
        $tmpStr .= $level[$dwNum / 2];
        $dwNum = 0;
    }
    $numAnsStr = $tmpStr . $numAnsStr;  
}

$numAnsStr = str_replace("零拾", "零", $numAnsStr);        
$numAnsStr = str_replace("零佰", "零", $numAnsStr);         
$numAnsStr = str_replace("零仟", "零", $numAnsStr);     
$numAnsStr = str_replace("零万", "万", $numAnsStr); 
$numAnsStr = str_replace("零亿", "亿", $numAnsStr);         
while (strpos($numAnsStr, "零零") !== false) {
    $numAnsStr = str_replace("零零", "零", $numAnsStr);
}
$numAnsStr = str_replace("亿万", "亿", $numAnsStr);        
if ($numDecimal != '') {  
    $decimalStr = '';
    for ($i = 0; $i < strlen($numDecimal); $i++) {
        $decimalStr .= $chncharacters[intval(substr($numDecimal, $i, 1))].$chnunits[$i+1];
    }
    $numAnsStr .= str_replace("零零", "零", $decimalStr);
}
return $numAnsStr;

}

(2) Konvertieren Sie Ausdrücke chinesischer Schriftzeichen in numerische Werte

Sie können reguläre Ausdrücke verwenden, um Beträge chinesischer Schriftzeichen umzuwandeln, chinesische Schriftzeichen Stück für Stück in entsprechende Zahlen umzuwandeln und zu akkumulieren Wenn „10.000“ oder „100 Millionen“ erreicht werden, wird das kumulierte Ergebnis mit dem entsprechenden Übertragsfaktor multipliziert.

function chntoNum($str) {

$dict = array(&#39;零&#39;=>0,'壹'=>1,'贰'=>2,'叁'=>3,'肆'=>4,'伍'=>5,'陆'=>6,'柒'=>7,'捌'=>8,'玖'=>9,'一'=>1,'二'=>2,'三'=>3,'四'=>4,'五'=>5,'六'=>6,'七'=>7,'八'=>8,'九'=>9,'十'=>10,'百'=>100,'千'=>1000,'万'=>10000,'亿'=>100000000,'元'=>1,'角'=>0.1,'分'=>0.01);
preg_match_all("/[一二三四五六七八九十百千万亿角分]/u", $str, $match);
$match = $match[0];
$result=0;
$temp=1;
foreach($match as $value){
    $num=$dict[$value];
    if($num==100000000||$num==10000){
        $result+=$temp*$num;
        $temp=1;
    }else if($num>=10&&$num<100){
        $temp*= $num;
    }else if($num<10){
        $temp*= 10;
        $result +=$temp*$num;
        $temp = 1;
    }
}
if($temp!=1){
    $result += $temp;
}
return sprintf("%.2f", $result);
}

Auf diese Weise können wir in unseren eigenen Projekten problemlos zwischen Zahlen und chinesischen Schriftzeichen konvertieren, indem wir diese Funktionen aufrufen.

Das obige ist der detaillierte Inhalt vonSo konvertieren Sie PHP-Zahlen in chinesische Schriftzeichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn