/** * Return number converted to words * * @param Number $number * * @return string */ public function toWords(Number $number) { $value = $number->getValue(); if ($value === 0.0) { return NumberDictionary::$zero; } $triplets = []; while ($value > 0) { $triplets[] = $value % 1000; $value = (int) ($value / 1000); } $words = []; foreach ($triplets as $i => $triplet) { if ($triplet > 0) { $threeDigitsWords = $this->threeDigitsToWords($triplet); if ($i > 0) { $case = $this->grammarCaseSelector->getGrammarCase($triplet); $mega = NumberDictionary::$mega[$i][$case]; $threeDigitsWords = $threeDigitsWords . ' ' . $mega; } $words[] = $threeDigitsWords; } } return implode(' ', array_reverse($words)); }
/** * Convert number to words with grammar cased subject * * @param Number $number * @param array $subject * * @return string */ protected function toWordsWithGrammarCasedDescription(Number $number, array $subject) { $convertedNumber = $this->numberTransformer->toWords($number); $grammarCase = $this->grammarCaseSelector->getGrammarCase($number->getUnits()); return $convertedNumber . ' ' . $subject[$grammarCase]; }