-1

「小さい」数字を英語に変換するのは面倒ではありません。しかし、BCMath Arbitrary Precision の数値を処理する場合は、それが可能です。

以下のコードを使用:

http://marc.info/?l=php-general&m=99928281523866&w=2

最大数は次のようです。

20 億 147 万 483 千 647

それより大きい数値を変換する関数を知っている人はいますか?

4

3 に答える 3

1

独自の関数を作成する必要があります。数字を文字列として使用することをお勧めします。次のように減算します。

    $string =  "12356";
    $text="";
    // level means 0-ones, 1- thousand , 2 million, 3 billion etc...
    $level=0;
    //until string has no character left
    while ($len=getval($string)){
      // get partial number from 0 to 999
      $string_partial = substr($string, (strlen($string)-$len)) ;
      // get hundreds
      $hund = ($string_partial - ($string_partial % 100))/100;
      // get tens
      $tens = $string_partial - ($hund *100);
      $tens = ($tens - ($tens %10))/10;
      // get ones
      $ones = $string_partial - ($tens*10) - ($hund*100);
      // remove partial_string form original string             
      $string = substr($string, 0, (strlen($string)-$len));
      // edbug echoing
      echo $level . " - " . $hund. " - " . $tens .  " - " . $ones . "<br>";
      // you need to create a function that convert number to text only from 0 to 999 to set correct million/thousand etc, use $level.
      //$text = getTextvalue($hund,$tens,$ones,$level).$text;
      //increment $level
      $level++;
    }
    function getval($n){
      switch (strlen($n)){
       case 0: return false;
       case 1: return 1;
       case 2: return 2;
       default: return 3;
       }
    }

例:

$string =  "123456789";

出力します

 $level - $hund - $tens - $ones
 0 - 7 - 8 - 9  
 1 - 4 - 5 - 6  //thousand
 2 - 1 - 2 - 3  //million
于 2011-02-13T17:37:21.513 に答える
0

より大きい数値の場合、 WolframAlphaPHP_MAX_INTなどの外部サービスに依存して関数を作成する必要があります。

これに対して PHP が提供する唯一の機能は、Intl のNumberFormatter. NumberFormatter::formatは float を受け入れますが、これは、64 ビット長のアーキテクチャでは 2^63-1 までの整数、または 32 ビット長のアーキテクチャでは 52 ビットの数値しか処理できないことを意味します。

于 2011-02-13T16:36:38.977 に答える
0

10^306 - 1 の整数を処理する vpi2english 関数を作成しました。これはVPI ツールボックスの一部です。

vpi2english(vpi('12000000110022987')) 
ans = 
twelve quadrillion, one hundred ten million, twenty two thousand, nine hundred eighty seven
于 2011-02-13T21:01:03.400 に答える