конвертировать большое количество в разговорный английский - PullRequest
0 голосов
/ 13 февраля 2011

Преобразование «маленьких» чисел в английский не доставляет хлопот.Но если вы обрабатываете числа BCMath Arbitrary Precision, тогда это может быть*

два миллиарда сто сорок семь миллионов четыреста восемьдесят три тысячи шестьсот сорок семь

Кто-нибудь знает функцию для преобразования чисел больше этого?

Ответы [ 3 ]

1 голос
/ 13 февраля 2011

Вы должны написать свою собственную функцию, я предлагаю использовать числа в качестве строки, давайте вычеркнуть подобное:

    $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
0 голосов
/ 14 февраля 2011

Я написал функцию vpi2english для обработки целых чисел от 10 ^ 306 до 1. Это часть моего набора инструментов VPI .

vpi2english(vpi('12000000110022987')) 
ans = 
twelve quadrillion, one hundred ten million, twenty two thousand, nine hundred eighty seven
0 голосов
/ 13 февраля 2011

Для чисел, больших PHP_MAX_INT, вам придется либо написать функцию, полагаясь на внешнюю службу, такую ​​как WolframAlpha .

Единственная функциональность, которую предлагает PHP для этогоэто Intl's NumberFormatter.NumberFormatter::format принимает числа с плавающей запятой, но это означает, что он может обрабатывать только целые числа до 2 ^ 63-1 в 64-битных длинных архитектурах или 52-битные числа в 32-битных.

...