Комментарии 18
Не уверен, что это кому-нибудь подойдёт, потому что уже есть такие стандартные значения как кило-, мега, гига итд. Не совсем понял, почему вам не подходит цифра с фактором в виде степени? Вроде бщепринятая вещь. И сама по себе задача не совсем понятна, где такое будет надо. Но сама идея неплохая.
100000 => 1e5
на мой взгляд общепринятый метод намного проще и даже более краток
Ничего ж себе вы кода написали...
Вообще задача сводится к тому, чтобы взять экспоненту из экспоненциальной записи, поделить на три, потом записать полученное число в 26-ричной системе счисления, где в качестве цифр используются буквы. Таким образом вы получите свои буквы в суффиксе.
Собственно, вы это и сделали, но в процессе изобрели свою собственную терминологию, написали кучу кода и ограничились всего тремя цифрами.
На пайтоне это может выглядеть приблизительно вот так: https://ideone.com/WLhvxq
Что-то я не понял, а как в вашей нотации решить собссно вашу же проблему. Сокращать степени десятки можно и просто через степень, без всяких научных нотаций и придумок хитрых.
Используя вашу буквенную схему запишите мне число, ну скажем 838295772233444310003.
В играх-кликерах его бы записали как 838F. Или, маловероятно, как 0,8G.
Ну, записать-то записали, а как эти числа между собой сравнивать? Вот когда у меня два числа 838e+18 и 838е+16, мне легко быстро понять, которое их них больше и насколько.
А вот в записи 838F и 838H как-то с ходу не разберемся. Можно предположить, что я хорошо помню порядок букв в алфавите, и могу с ходу распознать кто больше/меньше, но как понять насколько порядков? Это ж надо вспомнить на каком месте стоят буквы F и H, а потом вычесть номера этих позиций. Очень-очень неудобно) А когда начнутся двухбуквенные обозначеничя, то всё - приехали.
А может, не надо изобретать велосипед?
Что то у вас там совсем не сбалансировано, если для количества монет необходима форма записи с экспонентой.
А ещё в игровом сообществе (особенно в среде ММОРПГ) есть запись, где суффикс "К" означает умножение на тысячу, и их можно добавлять неограниченое количество раз (например 1к = 10000, 1кк = 1 000 000, 1ккк = 1 000 000 000, ну и тд). Если уже принимать какую-то систему множителей денежных знаков в игре, то скорее такую, знакомую игрокам...
Вы явно не играли ни в одну игру из жанра кликеров. Там это всё давным давно решено наиболее понятным и интуитивным способом (см. Приставки СИ), с помощью всем известных букв K(ило), M(ега), G(ига), T(ера), P(ета) и так далее.
Для вопрошающих "Зачем такое нужно?" — ответ дан в самом начале статьи. Речь идёт об игре жанра Idle/Incremental. Для таких игр экспоненциальный/сверхэкспоненциальный/гиперэкспоненциальный рост чисел — обычное дело.
Согласен, что изобретать велосипед в данном случае не стоит. Стандартно, для записи чисел в таких случаях применяется научная E-нотация.
Основная сложность при работе с огромными числами — это операции с ними. В инкрементальных играх скорость обработки намного важнее итогового результата. Опять-таки, не стоит изобретать велосипед, лучше посмотреть в сторону готовых библиотек.
<занудство>
Ну как минимум если у вас кликер и числа обновляются чаще раза в секунду - уже стоило задуматься на реализации без ToString, чтобы избежать лишних вызовов GC.
Ну и вместо BigInteger, раз все равно сокращаете, можно было бы использовать double. Если нужно реально больше 300 цифр в числе - можно придумать свой формат, где будет double + степень. При обновлении все что меньше определенной точности итак не имеет значения. BigInteger на больших числах может быть слишком медленным и тоже утечки памяти провоцировать.
</занудство>
А так вообще прикольно.
Выражение числа в виде букв