Для этого есть алгоритм:
Вам нужна карта, которая выглядит как
2 => "hundred"
3 => "thousand"
6 => "million"
9 => "billion"
12 => "trillion"
15 => "quadrillion"
... и так далее ...
1)Возьмите число «num», рассчитайте показатель log10 «ex» числа и напишите его.
Внимание
log10 (0) несуществует, поэтому убедитесь, что число не равно 0, и, поскольку нет смысла выводить что-то вроде 20 = "2 десять", вы должны вернуть число таким, какое оно есть, если оно меньше 100!
2) Теперь итерируйте по ключам хэш-карты выше и посмотрите, совпадает ли ключ, если не взять ключ, который меньше, чем показатель степени «ex».
3) Обновите «ex» для этого ключа!
4) Теперь отформатируйте число следующим образом:
num = num / pow (10, ex)
(!! ex является ключом хэш-карты !!)
5) теперь вы можете округлить число с определенной точностью и вывести num + yourHash[ex]
Пример:
number = 12345.45
exponent = floor(log10(12345.45))
exponent should now be 4 !
look for a key in the hash map -- whoops no key matches 4 ! -- so take 3 !
set exponent to 3
now you scale the number:
number = number / pow(10, exponent)
number = 12345.45 / pow(10, 3)
number = 12345.45 / 1000
number is now 12.34545
now you get the value to the corresponding key out of the hash map
the value to the key, which is 3 in this example, is thousand
so you output 12.34545 thousand