php - Question d'entretien, convertir les nombres inférieurs à 100 en chinois.
PHP中文网
PHP中文网 2017-06-14 10:50:09
0
6
1004

Comment convertir rapidement des nombres en texte
Par exemple, 1 => un, 2=> deux, ..., 15=》quinze
Ce à quoi je pense actuellement, c'est d'enregistrer les caractères chinois dans un tableau

$arr = ['一','二','三','四','五','六','七','八','九','十'];

Mais c'est trop compliqué. Comment convertir les nombres saisis en chinois ?

Le résultat final est le suivant :
Entrée 12
Sortie

 一二三四五六七八九十十一十二
PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous(6)
淡淡烟草味
<?php
        $number=57;
        $arr=array(

                '1'    =>    '一',
                '2'    =>    '二',
                '3'    =>    '三',
                '4'    =>    '四',
                '5'    =>    '五',
                '6'    =>    '六',
                '7'    =>    '七',
                '8'    =>    '八',
                '9'    =>    '九',
                '10'    =>    '十',

            );
        if($number>10){
            //倍数
            $bs    =    (int)($number/10);
            //余数
            $ys    =    $number%10;
            echo $arr[$bs].$arr[10].$arr[$ys];

        }else{
            echo $arr[$number];

        }

    
过去多啦不再A梦

Si vous pouvez décrire clairement le processus de conversion numérique avec des mots, alors l'écriture de code est un processus de traduction.

L'algorithme n'est en fait qu'une logique métier avec une logique métier très étrange. L'accent est mis sur l'analyse de cette logique métier

.

Vous pouvez convertir des chiffres arabes en chiffres chinois avant même d'avoir terminé vos études primaires. Vous devez avoir une méthode en tête pour terminer ce processus de conversion. L’objectif de l’enquête ici est donc le processus d’abstractiondu problème. Pour être abstrait et précis, vous devez d’abord avoir une analyse et une compréhension complètes du problème lui-même et découvrir les règles. Dans le processus de conversion numérique, quand 0 est-il appelé dix et quand est-il appelé zéro. Ce processus est si naturel dans l’esprit qu’il nécessite tout de même une certaine capacité à analyser sa situation et à en connaître les règles.

Je recommande cet article. L'analyse au début de l'article est le processus d'abstraction, qui est très important pour la programmation

漂亮男人
$setnumber = 99;
        $chiNum = array('十','一','二','三','四','五','六','七','八','九','十');
        if($setnumber < 100 && $setnumber >= 1) {
            for($i = 1;$i<=$setnumber;$i++) {
                $setstrnumber = (string)$i;
                $count = strlen($setstrnumber);
                if($count == 1) {
                    echo $chiNum[$i]."<br/>"; 
                } else {
                    $setchinum = '';
                    if($setstrnumber[0] != 1) {                      
                        $setchinum .= $chiNum[$setstrnumber[0]];
                    }
                    $setchinum .= $chiNum[0];
                    
                    if(intval($setstrnumber[1]) != 0) {
                        $setchinum .= $chiNum[$setstrnumber[1]];
                    }
                    echo $setchinum."<br/>";
                }
            }
        }
Ty80

Comment convertir rapidement des nombres en texte
Par exemple, 1 => un, 2=> deux, ..., 15=》quinze
Ce à quoi je pense actuellement, c'est d'enregistrer les caractères chinois dans un tableau

$arr = ['一','二','三','四','五','六','七','八','九','十'];

Mais c'est trop compliqué. Comment convertir les nombres saisis en chinois ?

Le résultat final est le suivant :
Entrée 12
Sortie

一二三四五六七八九十十一十二

Ce qui suit est la mise en œuvre de JavaScript

Observez la représentation numérique des caractères chinois

Les caractères chinois spécifient explicitement l'ordre des nombres. Par exemple, 一百零一 a l'ordre des centaines (cent, cent, dix, millions)

.

2 >>>> Deux 2 >>>> 二个
10 >>>> 一十 >>>> 10 >>>> > code> >>>>

16 >>>> 一十 六个 >>>> 十六

105 >>>> 一百 零十 五个 >>>> 一百零五

1024 >>>> 一千 零百 二十 四个 >>>> 一千零二十四

Vous pouvez voir que sa représentation peut être considérée comme la forme de 值 + 阶.

De plus, lorsque les conditions suivantes sont remplies 需要省略阶或者值

10 correspond à 十十 et s'écrit 10 对应 一十 写作
110 对应 一百一十零个 写作 一百一十110 correspond à cent et ten code> Ecriture Cent dix
.... Attendez

Sur la base de la réflexion ci-dessus, l'idée de programmation qui devrait être tirée est la suivante :

  1. Entrez des chiffres n

  2. Map n 映射到一个数组 tokens 上。 比如 8 变成 ["八"], 101 变成 ["一", "零", "一"] à un tableau jetons. Par exemple, 8 devient ["八"], 101 devient ["一", "zero", "一"]

  3. Ajouter un niveau 101 变成 ["一", "百", "十", "零", "一", "个"]

  4. Filtre, tel que Cent un dans la forme la plus simple 一百十零一个 变成最简形式 一百零一

Fonction outil

// 数字到汉字的映射表 
var mapHans = ['零', '一','二','三','四','五','六','七','八','九','十'];

// 用 n 得到汉字 输入 0 得到 '零'
var getHans = n => mapHans[n]; 

// 数字长度到汉字数级的映射表 
var mul = ['十', '百', '千', '万']

// ['i', 'love', 'my', 'wife'] >>>> ilovemywife 
var arr2str = arr => arr.join(''); 

// 输入 5 产生 [1, 2, 3, 4, 5]
var arrGenerator = n => (
    new Array(n).fill(0).map((e, idx) => idx + 1)
)

Réalisé

Première mise en œuvre 大于 10数字映射到汉字的数制 sur

Par exemple, saisissez 101 pour renvoyer 101 返回 一百零一

Il sera plus rapide d'utiliser la fonction outil écrite ci-dessus

var toHans = n => {
    // 比如输入 101 返回 ['一', '零', '一']
    var tokens = n.toString().split('').map(getHans); 
    
    // 对数阶的处理  如果上一步得到 ['一', '零', '一'] 
    // 那么at就是 ['百', '十']
    var at = mul.slice(0, tokens.length - 1).reverse();   
    
    // 归约 
    return tokens.reduce((acc, cur) => {
        acc.push(cur); 
        acc.push( at.shift() )
        
        return acc; 
        
        // 这个reduce将会把 tokens 和 at 耦合在一块 
        // ['一', '零', '一']  和 ['百', '十'] 耦合就是: 
        // ['一', '百', '零', '十', '一', undefined]
        // 下一步的两个 filter 就是要剔除多余的项 
    }, []).filter(e => e !== undefined).filter((e, idx, its) => {
        if (e === '零'){
            if (idx === its.length - 1) {
                // 针对 10 >>>> [一 十 零] 这种情况
                return false; 
            } else {
                // 针对 101 >>>> [一 百 零 十 一] 这种情况 
                its[idx + 1] = null;
            }
        } else if (idx === 0 && e === '一' && its[idx + 1] === '十'){
            // 针对 12 >>>> [一 十 二] 这种情况 
            return false; 
        }
        // 下面还可以再添加。。 不过应该没了。
        return e; 
    }); 
};

Test simple Test de conversion 2 4 6 8 16 32 ... 成 十六 三十二 ...

// 2 的 n 次方  
var twotwotwo = n => (
    new Array(n).fill(2).reduce((acc, cur, idx) => {
        acc = acc * cur; 
        return acc; 
    }, 1)
)

// 打印机 
var logger = (item, idx) => console.log(`第 ${idx + 1} 个:`, item); 

// test code 
function test4toHans(n) {
    var res = arrGenerator(n).map(twotwotwo).map(toHans).map(arr2str); 
    res.forEach(logger); 
}

Parcourir les nombres

....du 1 au n

var main = n => {
    var numbers = arrGenerator(n); 
    
    return numbers.map(toHans).map(arr2str); 
} 

Tests


过去多啦不再A梦

https://github.com/wilon/php-...

Les nombres PHP sont convertis en descriptions de caractères chinois et le RMB est en majuscule

伊谢尔伦

Prend en charge des centaines de milliards de nombres. La modification du tableau ws peut être étendue à l'infini. La modification du tableau cns en chinois traditionnel peut être utilisée pour capitaliser le RMB

.
<?php

function IntToString($num)
{
    $cns = ['零','一','二','三','四','五','六','七','八','九'];

    $ws = ['','十','百','千','万','十','百','千','亿','十','百','千'];

    $str = '';
    foreach (array_reverse(str_split((string)$num,1)) as $key => $value) 
        $str .= $ws[$key].$cns[$value];
    $temp = '';//反转字符串
    for($i = strlen($str)-1; $i>=0; $i--)
        $temp .= mb_substr($str,$i,1,'utf-8');

    return $temp;
}

echo IntToString(231231251237);
////二千三百一十二亿三千一百二十五万一千二百三十七

Ci-joint l'idée
/a/11...

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal