JpnForPhp\Converter\Converter::toJapaneseNumeral PHP Method

toJapaneseNumeral() public static method

Converts a number in Arabic/Western format into Japanese numeral.
public static toJapaneseNumeral ( integer $number, integer $type = self::NUMERAL_KANJI ) : string
$number integer The input number.
$type integer
return string The Japanese numeral.
    public static function toJapaneseNumeral($number, $type = self::NUMERAL_KANJI)
    {
        // Return fast on zero
        if ($number == 0) {
            if ($type == self::NUMERAL_READING) {
                return 'zero';
            } else {
                return '〇';
            }
        }
        $separator = '';
        switch ($type) {
            case self::NUMERAL_KANJI:
                $mapPowersOfTen = self::$mapPowersOfTenKanji;
                $mapDigits = self::$mapDigitsKanji;
                break;
            case self::NUMERAL_KANJI_LEGAL:
                $mapPowersOfTen = self::$mapPowersOfTenKanjiLegal;
                $mapDigits = self::$mapDigitsKanjiLegal;
                break;
            case self::NUMERAL_READING:
                $mapPowersOfTen = self::$mapPowersOfTenReading;
                $mapDigits = self::$mapDigitsReading;
                $separator = ' ';
                break;
            default:
                throw new Exception('Unknown type');
        }
        $exponent = strlen($number) - 1;
        if ($exponent > 4) {
            $exponentRemainder = $exponent % 4;
            $closestExponent = $exponent - $exponentRemainder;
            $power = pow(10, $closestExponent);
            $remainder = $number % $power;
            $roundPart = $number - $remainder;
            $multiplier = (int) (($number - $remainder) / $power);
            if ($type != self::NUMERAL_READING || !array_key_exists($roundPart, self::$readingExceptions)) {
                $result = self::toJapaneseNumeral($multiplier, $type) . $separator . $mapPowersOfTen[$closestExponent];
            } else {
                $result = self::$readingExceptions[$roundPart];
            }
            if ($remainder != 0) {
                $result .= rtrim($separator . self::toJapaneseNumeral($remainder, $type));
            }
            return $result;
        } else {
            $result = '';
            while ($exponent > 0) {
                $power = pow(10, $exponent);
                $remainder = $number % $power;
                $roundPart = $number - $remainder;
                $multiplier = (int) (($number - $remainder) / $power);
                if ($type != self::NUMERAL_READING || !array_key_exists($roundPart, self::$readingExceptions)) {
                    if ($multiplier != 1 || $exponent == 4) {
                        $result .= $mapDigits[$multiplier] . $separator;
                    }
                    $result .= $mapPowersOfTen[$exponent] . $separator;
                } else {
                    $result .= self::$readingExceptions[$roundPart] . $separator;
                }
                $number = $remainder;
                $exponent = strlen($number) - 1;
            }
            if ($number != 0) {
                $result .= $mapDigits[$number];
            }
            return $result;
        }
    }

Usage Example

Beispiel #1
0
 public function testConversionToJapaneseNumeralReading1050919092985()
 {
     $result = Converter::toJapaneseNumeral(1050919092985, Converter::NUMERAL_READING);
     $this->assertEquals('ichō go hyaku kyū oku issen kyū hyaku kyū man ni sen kyū hyaku hachi jū go', $result);
 }