Задать вопрос
@ff0xff

Как вернуть строковое число после обрезания с типом float?

Есть число очень очень маленькое.
Мне нужно обрезать его например до двух знаков после точки ( НЕ ОКРУГЛИТЬ А ОБРЕЗАТЬ!)
$var = 0.0100000000000000000001; // хочу на выходе вот так 0.01

echo $var; // но тут выводится экспоненциальная запись вроде как бы все ок 


function rounded($coin, $rounding):float
    {
        $explode = explode('.', $coin); // но здесь он работает с этой экспоненциальной записью 

        if (isset($explode[1])) {
            $round = mb_strimwidth($explode[1], 0, $rounding);
            if ($round != '') {
                return (float)$explode[0] . '.' . $round; // и в $round вместо числа попадает 0E-  
            }
            return (float)$explode[0];
        } else {
            return (float)$explode[0];
        }
    }
echo "\n";
var_dump(rounded($var,2));


как вернуть нормальное обрезанное число типа float - без этой сраной экспоненциальной записи? ):-|
  • Вопрос задан
  • 86 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
SerJook
@SerJook
кодер
function rounded($number, $decimals) {
    $power = pow(10, $decimals); 
    if($number > 0){
        return floor($number * $power) / $power; 
    } else {
        return ceil($number * $power) / $power; 
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@bkosun
$result = bcdiv(0.0100000000000000000001, 1, 2); // 0.01


https://secure.php.net/manual/ru/function.bcdiv.php

Обратите внимание! Функция bcdiv доступна если PHP сконфигурирован с включенной настройкой --enable-bcmath

https://stackoverflow.com/questions/9944001/delete...
Ответ написан
Комментировать
KodyWiremane
@KodyWiremane
Пони, Debian, LEMP, LAN, любитель
round($var-0.005, 2)

upd: А, знак:
round($var >= 0 ? $var-0.005 : $var+0.005, 2)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы