【面试题】小数转换为人民币大写形式,PHP实现。

原创
2016/04/16 22:23
阅读数 126

前段时间面试,有个编程题目是将小数转换为人民币大写形式,最近用PHP多,就写一段,全当记个日志吧。未完待续。

<?php

$newline = '<br/>';
$RMB = array('', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
$RMBUnit = array('圆', '拾', '百', '千', '万', '拾', '百', '千', '亿',
                 '拾', '百', '千', '万', '拾', '百', '千');

function randomFloat($min = 0, $max = 1) {
    return $min + mt_rand() / mt_getrandmax() * ($max - $min);
}

function change2RMB($input) {
    global $newline, $RMB, $RMBUnit;
    
    $inputStr = strval(number_format($input, 2));
    $inputStr = str_replace(',', '', $inputStr);
    
    echo $inputStr . $newline;
    $inputExplode = explode('.', $inputStr, 2);
    
    $inputIntStr = $inputExplode[0];
    $inputIntLen = strlen($inputIntStr);
//     echo $inputIntStr . $newline . $inputIntLen . $newline;
    if ($inputIntLen > 16) {
        return '你的钱已经超过1亿亿,请赞助作者完善此程序,感谢!';
    }
    
    for ($i = 0; $i < $inputIntLen; $i++) {
        $j = $inputIntLen - $i - 1;
        $number = $RMB[$inputIntStr[$j]];
        if ($number == '') {
            if ($i != 0 && $i != 4 && $i !=8)
                continue;
        }
        
        $resultIntStr = $number . $RMBUnit[$i] . $resultIntStr;
    }
//     echo $resultIntStr . $newline;
    
    $inputFloatStr = $inputExplode[1];
    if ($inputFloatStr[0] != 0) {
        $resultFloatStr = $RMB[$inputFloatStr[0]] . '角';
    }
    
    if ($inputFloatStr[1] != 0) {
        $resultFloatStr .=$RMB[$inputFloatStr[1]] . '分';
    }
    
    return $resultIntStr . $resultFloatStr;
}


$input = randomFloat(0, 10000000000000000);
// $input = 3000000000070.913;

$result = change2RMB($input);
echo $input . ' => ' . $result;


展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部