Я хочу округлить мою переменную, если она больше десятичной .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);
Если вы немного манипулируете числами, вы можете выяснить, являются ли десятичные дроби .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
Я сделал тебя немного взломать, вот код
$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;
Может быть, что-то вроде этой функции?
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
Вы можете указать «разрыв части», если хотите.