Pikachu
Добрый вечер!
Я еще нуб в этом направлении, да код Гг но как умеем!
ПОМОГИТЕ НОВИЧКУ!!!
Сам код:PHP:
function n_f($i, $b = 0) { //Сама функция форматирования return $i.$b[$pow]; } else { return «<img src=»https://php.ru/style/1.gif»>»; } } $b = array(», ‘k’, ‘m’, ‘b’, ‘t’, ‘q’, ‘u’, ‘x’, ‘y’, ‘h’, ‘s’, ‘d’, ‘v’, ‘w’, ‘r’, ‘g’, ‘n’, ‘c’, ‘p’, ‘o’, ‘z’, ‘vi’, ‘un’, ‘du’, ‘tr’, ‘qu’, ‘qi’, ‘se’, ‘sp’, ‘oc’, ‘nv’, ‘tn’, ‘ut’, ‘dt’, ‘aa’, ‘ab’, ‘ac’, ‘ad’, ‘ae’, ‘af’, ‘ag’, ‘ah’, ‘ai’, ‘aj’, ‘ak’, ‘al’, ‘am’, ‘an’, ‘ao’, ‘ap’, ‘aq’, ‘ar’, ‘as’, ‘at’, ‘au’, ‘av’, ‘aw’, ‘ax’, ‘ay’, ‘az’, ‘ba’, ‘bb’, ‘bc’, ‘bd’, ‘be’, ‘bf’, ‘bg’); //чтоб не выводило 1 000 000 выводит так (1m) echo(n_f($user[‘gold’], $b)); //Вывожу так!В итоге если число превышает отметку у которого 300 цифр то выводит (return «<img src=’/style/1.gif’>»
есть много способов конечно но там код не читабелен из за этих самых чисел!
Приведите пример, как можно сделать так чтоб числа выводились нормально и без каких либо ошибок, а точнее числа у которых превышает более 300 цифр
roboformation
Числа, состоящие из более 201 цифры (а не 300), можно выводить, например, с помощью научной нотации
PHP:
function n_f($i, $b = 0) { //Сама функция форматирования return $i.$b[$pow]; } else { } } $b = array(», ‘k’, ‘m’, ‘b’, ‘t’, ‘q’, ‘u’, ‘x’, ‘y’, ‘h’, ‘s’, ‘d’, ‘v’, ‘w’, ‘r’, ‘g’, ‘n’, ‘c’, ‘p’, ‘o’, ‘z’, ‘vi’, ‘un’, ‘du’, ‘tr’, ‘qu’, ‘qi’, ‘se’, ‘sp’, ‘oc’, ‘nv’, ‘tn’, ‘ut’, ‘dt’, ‘aa’, ‘ab’, ‘ac’, ‘ad’, ‘ae’, ‘af’, ‘ag’, ‘ah’, ‘ai’, ‘aj’, ‘ak’, ‘al’, ‘am’, ‘an’, ‘ao’, ‘ap’, ‘aq’, ‘ar’, ‘as’, ‘at’, ‘au’, ‘av’, ‘aw’, ‘ax’, ‘ay’, ‘az’, ‘ba’, ‘bb’, ‘bc’, ‘bd’, ‘be’, ‘bf’, ‘bg’); //чтоб не выводило 1 000 000 выводит так (1m) echo(n_f($user[‘gold’], $b)); //Вывожу так!
Chushkin
Ваши варианты ограничены типом FLOAT: на x32 — 1.8e308.
— Добавлено —
Мой вариант:PHP:
function bcShort($bigN, $round=false, $postfix=[]) { static $default = [», ‘k’, ‘m’, ‘b’, ‘t’, ‘q’, ‘u’, ‘x’, ‘y’, ‘h’, ‘s’, ‘d’, ‘v’, ‘w’, ‘r’, ‘g’, ‘n’, ‘c’, ‘p’, ‘o’, ‘z’, ‘vi’, ‘un’, ‘du’, ‘tr’, ‘qu’, ‘qi’, ‘se’, ‘sp’, ‘oc’, ‘nv’, ‘tn’, ‘ut’, ‘dt’, ‘aa’, ‘ab’, ‘ac’, ‘ad’, ‘ae’, ‘af’, ‘ag’, ‘ah’, ‘ai’, ‘aj’, ‘ak’, ‘al’, ‘am’, ‘an’, ‘ao’, ‘ap’, ‘aq’, ‘ar’, ‘as’, ‘at’, ‘au’, ‘av’, ‘aw’, ‘ax’, ‘ay’, ‘az’, ‘ba’, ‘bb’, ‘bc’, ‘bd’, ‘be’, ‘bf’, ‘bg’]; if(!$postfix) { $postfix = $default; } $ln = ($l % 3 ?: 3); if($round and $l > 3) { } $le = ($l — $ln); return $n . ($postfix[$le/3] ?? ‘e’ . $le); } // Пример bcShort($n1), // 1e405 bcShort($n1, true), // 2e405 bcShort($n2), // 1bf ]);
roboformation
Если $i — int типа, то никакое решение не поможет.
А если хочется побольше поддерживаемых чисел, тоPHP:Здесь $i — string типа
Chushkin
Ещё раз, — не забывайте про ограничение FLOAT.
roboformation
А как оно мне сейчас мешает?
Pikachu
ок спасибо! Сейчас попробуем.
Pikachu
не пашет
— Добавлено —
нужно рабочее решение! Остальное даже пробовать не буду так как 100% покажет 0
когда число 100000000000000000000000000000*1000
roboformation
Пашет и моё последнее решение, и его. Это не проблема кода (как я понял, у тебя php 5.6 — может, из-за версии не работает, либо ты что-то недосмотрел)
mkramer
Не истерим. Тут никто никому ничего не обязан, люди тратят свободное время, пытаясь помочь.
— Добавлено —
Для работы со сверхбольшими числами есть https://www.php.net/manual/ru/book.bc.php
Chushkin
BC, GMP не подходят для задачки. Там нет нужных функций.
ТС-у нужно просто отформатировать число. Т.е. приведение числа к сокращённому формату с округлением значимого числа до целого.
— Добавлено —Ох уж эти студенты XXI века, — чуть что сразу визг, истерика, разбрасывание тетрадок.
— Добавлено —
Дошло. Если ТС-у нужна ещё и математика с числами, то конечно BC, GMP ему в руки.