Округлить десятичное число для конкретных десятичных знаков в переполнении стека

Я хочу округлить мою переменную, если она больше десятичной .3 и если он ниже или равен, он будет округляться, например, если у меня есть 1.34 это будет округляться до 2, если у меня есть 1.29 это будет округляться до 1и если у меня есть 1.3 это будет округляться до 1, Я не знаю, как это сделать точно, сейчас я использую круглую базовую функцию, например:

$weight = $weight/1000;
if($weight < 1) $weight = 1;
else $weight = round($weight, 0, PHP_ROUND_HALF_DOWN);

2

Решение

Если вы немного манипулируете числами, вы можете выяснить, являются ли десятичные дроби .3 или выше. Вы достигнете этого, суммируя значение и вычитая его из исходного значения. Проверьте, если результат этого, умноженный на 10, больше 3. Если это так, у вас есть что-то выше x.3,

$number = 1.31;

$int = floor($number);
$float = $number-$int;
if ($float*10 > 3.1)
$result = ceil($number);
else
$result = $int;

echo $result; // 2
1

Другие решения

Я сделал тебя немного взломать, вот код

$weight = 5088;
$weight = $weight/1000;

if($weight < 1)  {
$weight = 1;
} else {
// I get the last number (I treat the $weight as a string here)
$last_number = substr($weight, -1, 1);
// Then I get the precision (floating numbers)
$precision = strlen(substr(strrchr($weight, "."), 1));
// Then I convert it to a string so I can use some helpful string functions
$weight_str = (string) $weight;
// If the last number is less then 3
if ($last_number > 3)
// I change it to 9 I could just change it to 5 and it would work
// because round will round up if then number is 5 or greater
$weight_str[strlen($weight_str) -1] = 9;
}

}
// Then the round will round up if it's 9 or round down if it's 3 or less
$weight = round($weight_str, $precision);
echo $weight;
0

Может быть, что-то вроде этой функции?

function roundImproved($value, $decimalBreakPart = 0.3) {
$whole = floor($value);
$decimal = $value - $whole;
$decimalPartLen = strlen($decimal) - 2;

return (number_format($decimal, $decimalPartLen) <= number_format($decimalBreakPart, $decimalPartLen) ? $whole : ceil($value));
}

Доказательство:
http://sandbox.onlinephpfunctions.com/code/d75858f175dd819de069a8a05611ac9e7053f07a

Вы можете указать «разрыв части», если хотите.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector