recherche

Maison  >  Questions et réponses  >  le corps du texte

php - Question d'entretien, convertir les nombres inférieurs à 100 en chinois.

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中文网2725 Il y a quelques jours986

répondre à tous(6)je répondrai

  • 淡淡烟草味

    淡淡烟草味2017-06-14 10:52:09

    <?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];
    
            }
    
        

    répondre
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-06-14 10:52:09

    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

    répondre
    0
  • 漂亮男人

    漂亮男人2017-06-14 10:52:09

    $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/>";
                    }
                }
            }

    répondre
    0
  • PHP中文网

    PHP中文网2017-06-14 10:52:09

    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


    répondre
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-06-14 10:52:09

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

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

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-14 10:52:09

    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...

    répondre
    0
  • Annulerrépondre