前段时间面试,有个编程题目是将小数转换为人民币大写形式,最近用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;