我使用Follow函数将数字转换为PHP中的单词转换。
我预期的结果。
一千五百四十二卢比二十六只Paise Only
但是,它的显示
一千五百四十二卢比两两六Paise只有
我的职能是:
function displaywords($number){
$no = round($number);
$point = round($number - $no, 2) * 100;
$hundred = null;
$digits_1 = strlen($no);
$i = 0;
$str = array();
$words = array('0' => '', '1' => 'one', '2' => 'two',
'3' => 'three', '4' => 'four', '5' => 'five', '6' => 'six',
'7' => 'seven', '8' => 'eight', '9' => 'nine',
'10' => 'ten', '11' => 'eleven', '12' => 'twelve',
'13' => 'thirteen', '14' => 'fourteen',
'15' => 'fifteen', '16' => 'sixteen', '17' => 'seventeen',
'18' => 'eighteen', '19' =>'nineteen', '20' => 'twenty',
'30' => 'thirty', '40' => 'forty', '50' => 'fifty',
'60' => 'sixty', '70' => 'seventy',
'80' => 'eighty', '90' => 'ninety');
$digits = array('', 'hundred', 'thousand', 'lakh', 'crore');
while ($i < $digits_1) {
$divider = ($i == 2) ? 10 : 100;
$number = floor($no % $divider);
$no = floor($no / $divider);
$i += ($divider == 10) ? 1 : 2;
if ($number) {
$plural = (($counter = count($str)) && $number > 9) ? 's' : null;
$hundred = ($counter == 1 && $str[0]) ? ' and ' : null;
$str [] = ($number < 21) ? $words[$number] .
" " . $digits[$counter] . $plural . " " . $hundred
:
$words[floor($number / 10) * 10]
. " " . $words[$number % 10] . " "
. $digits[$counter] . $plural . " " . $hundred;
} else $str[] = null;
}
$str = array_reverse($str);
$result = implode('', $str);
$points = ($point) ?
"" . $words[$point / 10] . " " .
$words[$point = $point % 10] : '';
if($points != ''){
echo $result . "Rupees " . $points . " Paise Only";
} else {
echo $result . "Rupees Only";
}
}
$ins=1542.26;
echo displaywords($ins);
答案 0 :(得分:3)
function displaywords($number){
$no = (int)floor($number);
$point = (int)round(($number - $no) * 100);
$hundred = null;
$digits_1 = strlen($no);
$i = 0;
$str = array();
$words = array('0' => '', '1' => 'one', '2' => 'two',
'3' => 'three', '4' => 'four', '5' => 'five', '6' => 'six',
'7' => 'seven', '8' => 'eight', '9' => 'nine',
'10' => 'ten', '11' => 'eleven', '12' => 'twelve',
'13' => 'thirteen', '14' => 'fourteen',
'15' => 'fifteen', '16' => 'sixteen', '17' => 'seventeen',
'18' => 'eighteen', '19' =>'nineteen', '20' => 'twenty',
'30' => 'thirty', '40' => 'forty', '50' => 'fifty',
'60' => 'sixty', '70' => 'seventy',
'80' => 'eighty', '90' => 'ninety');
$digits = array('', 'hundred', 'thousand', 'lakh', 'crore');
while ($i < $digits_1) {
$divider = ($i == 2) ? 10 : 100;
$number = floor($no % $divider);
$no = floor($no / $divider);
$i += ($divider == 10) ? 1 : 2;
if ($number) {
$plural = (($counter = count($str)) && $number > 9) ? 's' : null;
$hundred = ($counter == 1 && $str[0]) ? ' and ' : null;
$str [] = ($number < 21) ? $words[$number] .
" " . $digits[$counter] . $plural . " " . $hundred
:
$words[floor($number / 10) * 10]
. " " . $words[$number % 10] . " "
. $digits[$counter] . $plural . " " . $hundred;
} else $str[] = null;
}
$str = array_reverse($str);
$result = implode('', $str);
if ($point > 20) {
$points = ($point) ?
"" . $words[floor($point / 10) * 10] . " " .
$words[$point = $point % 10] : '';
} else {
$points = $words[$point];
}
if($points != ''){
echo $result . "Rupees " . $points . " Paise Only";
} else {
echo $result . "Rupees Only";
}
}
echo displaywords(1542.26);
echo "\n";
echo displaywords(1542.58);
答案 1 :(得分:1)
我将代码重新编写为更高效的代码。 (我认为) 它使用更少的变量,没有内爆,没有数组函数,更少的ifs和更少的计算。
它会在.
处展开数字,并使其成为一个数组,并在相同的代码($val
)中单独处理它们。
然后它将每个数字的字符串和str_pads取为它的“主号”(不知道更好的说法)。
所以在1526年,它看着1,用str_pad使它成为1000
如果它高于90,则使用$ words和$ digits。
此代码还会处理0.50
或10
等数字。
function displaywords($number){
$words = array('0' => '', '1' => 'one', '2' => 'two',
'3' => 'three', '4' => 'four', '5' => 'five', '6' => 'six',
'7' => 'seven', '8' => 'eight', '9' => 'nine',
'10' => 'ten', '11' => 'eleven', '12' => 'twelve',
'13' => 'thirteen', '14' => 'fourteen',
'15' => 'fifteen', '16' => 'sixteen', '17' => 'seventeen',
'18' => 'eighteen', '19' =>'nineteen', '20' => 'twenty',
'30' => 'thirty', '40' => 'forty', '50' => 'fifty',
'60' => 'sixty', '70' => 'seventy',
'80' => 'eighty', '90' => 'ninety');
$digits = array('', '', 'hundred', 'thousand', 'lakh', 'crore');
$number = explode(".", $number);
$result = array("","");
$j =0;
foreach($number as $val){
// loop each part of number, right and left of dot
for($i=0;$i<strlen($val);$i++){
// look at each part of the number separately [1] [5] [4] [2] and [5] [8]
$numberpart = str_pad($val[$i], strlen($val)-$i, "0", STR_PAD_RIGHT); // make 1 => 1000, 5 => 500, 4 => 40 etc.
if($numberpart <= 20){ // if it's below 20 the number should be one word
$numberpart = 1*substr($val, $i,2); // use two digits as the word
$i++; // increment i since we used two digits
$result[$j] .= $words[$numberpart] ." ";
}else{
//echo $numberpart . "<br>\n"; //debug
if($numberpart > 90){ // more than 90 and it needs a $digit.
$result[$j] .= $words[$val[$i]] . " " . $digits[strlen($numberpart)-1] . " ";
}else if($numberpart != 0){ // don't print zero
$result[$j] .= $words[str_pad($val[$i], strlen($val)-$i, "0", STR_PAD_RIGHT)] ." ";
}
}
}
$j++;
}
if(trim($result[0]) != "") echo $result[0] . "Rupees ";
if($result[1] != "") echo $result[1] . "Paise";
echo " Only";
}
$ins=1516.16;
echo displaywords($ins);
在代码中添加了一些注释 注意到它更大的数字给出了错误的输出,更正了。
答案 2 :(得分:0)
...
"my-angular-app": {
"architect": {
"ci-build": {
"builder": "@nrwl/workspace:run-commands",
"options": {
"commands": [
"ng build my-angular-app --configuration={args.configuration} --single-bundle --bundleStyles false --keepStyles false"
]
}
},
...
"my-node-lib": {
"architect": {
"ci-build": {
"builder": "@nrwl/workspace:run-commands",
"options": {
"commands": [
"ng build my-node-lib --configuration={args.configuration}"
]
}
}
...