【问题标题】:How to fix my Php Function for Converting Numbers to Words outputing ten one instead of eleven, from eleven to nineteen?如何修复我的用于将数字转换为单词的 Php 函数输出十一个而不是十一,从十一到十九?
【发布时间】:2019-02-19 09:20:45
【问题描述】:

我在输出 11 到 19 的单词时遇到问题,而不是 11 输出 10 1 和 12 输出 10 2 依此类推直到 19,但在十进制中它正确输出 10 到 19

PHP 最新,网络服务器

<?php
function toWords($num) {

  $ones = array(
    0 => "Zero",
    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",
    "014" => "Fourteen"
  );
  $tens = array(
    0 => "Zero",
    1 => "Ten",
    2 => "Twenty",
    3 => "Thirty",
    4 => "Forty",
    5 => "Fifty",
    6 => "Sixty",
    7 => "Seventy",
    8 => "Eighty",
    9 => "Ninety"
  );
  $hundreds = array(
    "Hundred",
    "Thousand",
    "Million",
    "Billion",
    "Trillion",
    "Quadrillion"
  ); /*limit t quadrillion */
  $num = number_format($num, 2, ".", ",");
  $num_arr = explode(".", $num);
  $wholenum = $num_arr[0];
  $decnum = $num_arr[1];
  $whole_arr = array_reverse(explode(",", $wholenum));
  krsort($whole_arr, 1);
  $rettxt = "";
  foreach ($whole_arr as $key => $i) {

    while (substr($i, 0, 1) == "0")
      $i = substr($i, 1, 5);
    if ($i < 20) {
      /* echo "getting:".$i; */
      $rettxt .= $ones[$i];
    } elseif ($i < 100) {
      if (substr($i, 0, 1) != "0")  $rettxt .= $tens[substr($i, 0, 1)];
      if (substr($i, 1, 1) != "0") $rettxt .= " ".$ones[substr($i, 1, 1)];
    } else {
      if (substr($i, 0, 1) != "0") $rettxt .= $ones[substr($i, 0, 1)]." ".$hundreds[0];
      if (substr($i, 1, 1) != "0")$rettxt .= " ".$tens[substr($i, 1, 1)];
      if (substr($i, 2, 1) != "0")$rettxt .= " ".$ones[substr($i, 2, 1)];
    }
    if ($key > 0) {
      $rettxt .= " ".$hundreds[$key]." ";
    }
  } $rettxt = $rettxt." Pesos";
  if ($decnum > 0) {
    $rettxt .= " and ";
    if ($decnum < 20) {
      $rettxt .= $ones[$decnum];
    } elseif ($decnum < 100) {
      $rettxt .= $tens[substr($decnum, 0, 1)];
      $rettxt .= " ".$ones[substr($decnum, 1, 1)];
    }

    $rettxt = $rettxt." Centavos";
  }
  return $rettxt;
}
?>

输出是十个二而不是十二(十一到十九) 但在十进制中它正确输出的话 十一到十九

四千二百十二比索(P 4,212.00), 一千九百十七比索和十八分(P 1,917.18)... 我在这个网站上找到了这段代码:https://www.studentstutorial.com/php/number-to-words.php

【问题讨论】:

  • echo toWords(11); 为我回声Eleven Pesos
  • @Second2None 尝试用数百个 echo toWords(111) 回显;它输出一百十一个比索
  • 你需要以正确的顺序做事——首先检查特殊情况(十一、十二、……),只有当你没有遇到这些值之一时,你才能继续“正常”东西。
  • @04FS 我刚刚从网站上复制了代码,您知道错误的位置和代码部分吗?

标签: php currency


【解决方案1】:
<?php

$number = '11545';
$locale = 'en_US';
$format = numfmt_create($locale, NumberFormatter::SPELLOUT);
$in_words = numfmt_format($format, $number);

print_r($in_words);
// eleven thousand five hundred forty-five

?>

【讨论】:

  • 十五万点五 - 150,000.50 结果 150,000 - 150,000 预期
猜你喜欢
  • 2017-08-14
  • 2013-11-05
  • 1970-01-01
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
  • 2020-06-02
  • 1970-01-01
相关资源
最近更新 更多