/**
  * 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];
 }