Yêu cầu:
– Viết hàm chuyển đổi từ số sang chữ trong PHP
– VD: 1,056,500 -> Một triệu không trăm năm mươi sáu ngàn năm trăm.
– Viết hàm chuyển đổi từ số sang chữ trong PHP
– VD: 1,056,500 -> Một triệu không trăm năm mươi sáu ngàn năm trăm.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
function convert_number_to_words($number) {
$hyphen = ' ';
$conjunction = ' ';
$separator = ' ';
$negative = 'âm ';
$decimal = ' phẩy ';
$one = 'mốt';
$ten = 'lẻ';
$dictionary = array(
0 => 'Không',
1 => 'Một',
2 => 'Hai',
3 => 'Ba',
4 => 'Bốn',
5 => 'Năm',
6 => 'Sáu',
7 => 'Bảy',
8 => 'Tám',
9 => 'Chín',
10 => 'Mười',
11 => 'Mười một',
12 => 'Mười hai',
13 => 'Mười ba',
14 => 'Mười bốn',
15 => 'Mười lăm',
16 => 'Mười sáu',
17 => 'Mười bảy',
18 => 'Mười tám',
19 => 'Mười chín',
20 => 'Hai mươi',
30 => 'Ba mươi',
40 => 'Bốn mươi',
50 => 'Năm mươi',
60 => 'Sáu mươi',
70 => 'Bảy mươi',
80 => 'Tám mươi',
90 => 'Chín mươi',
100 => 'trăm',
1000 => 'ngàn',
1000000 => 'triệu',
1000000000 => 'tỷ',
1000000000000 => 'nghìn tỷ',
1000000000000000 => 'ngàn triệu triệu',
1000000000000000000 => 'tỷ tỷ'
);
if (!is_numeric($number)) {
return false;
}
// if (($number >= 0 && (int) $number < 0) || (int) $number < 0 - PHP_INT_MAX) {
// // overflow
// trigger_error(
// 'convert_number_to_words only accepts numbers between -' . PHP_INT_MAX . ' and ' . PHP_INT_MAX,
// E_USER_WARNING
// );
// return false;
// }
if ($number < 0) {
return $negative . $this->convert_number_to_words(abs($number));
}
$string = $fraction = null;
if (strpos($number, '.') !== false) {
list($number, $fraction) = explode('.', $number);
}
switch (true) {
case $number < 21:
$string = $dictionary[$number];
break;
case $number < 100:
$tens = ((int) ($number / 10)) * 10;
$units = $number % 10;
$string = $dictionary[$tens];
if ($units) {
$string .= strtolower( $hyphen . ($units==1?$one:$dictionary[$units]) );
}
break;
case $number < 1000:
$hundreds = $number / 100;
$remainder = $number % 100;
$string = $dictionary[$hundreds] . ' ' . $dictionary[100];
if ($remainder) {
$string .= strtolower( $conjunction . ($remainder<10?$ten.$hyphen:null) . $this->convert_number_to_words($remainder) );
}
break;
default:
$baseUnit = pow(1000, floor(log($number, 1000)));
$numBaseUnits = (int) ($number / $baseUnit);
$remainder = $number - ($numBaseUnits*$baseUnit);
$string = $this->convert_number_to_words($numBaseUnits) . ' ' . $dictionary[$baseUnit];
if ($remainder) {
$string .= strtolower( $remainder < 100 ? $conjunction : $separator );
$string .= strtolower( $this->convert_number_to_words($remainder) );
}
break;
}
if (null !== $fraction && is_numeric($fraction)) {
$string .= $decimal;
$words = array();
foreach (str_split((string) $fraction) as $number) {
$words[] = $dictionary[$number];
}
$string .= implode(' ', $words);
}
return $string;
}
|
Kết quả:
1
2
3
4
|
$number = 1056500;
$word = convert_number_to_words($number);
echo $word;
//result: Một triệu không trăm năm mươi sáu ngàn năm trăm
|
Tags:
PHP
4.94 / 169 rates