我的功能如下:
static function applyPrecision($vals) {
$originalNumber = $vals['reading'];
if (is_numeric($originalNumber)) {
$precision = ($vals['precision'] != '' || $vals['precision'] != 0) ? $vals['precision'] : 4;
$factor = pow(10, $precision);
$multipliedNumber = $originalNumber * $factor;
//$integerMultipliedNumber = floor($multipliedNumber);
$var = explode(".", $multipliedNumber);
$integerMultipliedNumber = $var[0];
return $result = (float) ($integerMultipliedNumber / $factor);
} else {
return $originalNumber;
}
}
使用此方法,我们可以对数字应用精度,而无需四舍五入值 例如:-45.12345678 给定精度为3,则输出为45.123
但如果这样的数字,则为:45.1000000 精度是3 然后输出仅像45.1一样,零被跳过,有什么办法可以避免这种情况?
答案 0 :(得分:0)
如果这是关于浮点数的问题,则14.1与14.100相同。如果这是关于字符串的问题,那么您应该只使用substr()
。在下面的答案中,$number
是要剪切的数字,$precision
是您想要的小数位数。
$number = (string) $number;
$temp = $precision <= 0 ? 0 : $precision+1;
return substr($number, 0, strrpos($number, '.') + $temp);
答案 1 :(得分:0)
要获取浮点数的前3个子位数而不进行舍入,必须使用float($number*1000/1000)
,然后将其与number_format(float($number*1000/1000),3)
示例
$var =0.35489;
$var2 = number_format(floor($var * 1000) / 1000,3);
echo $var2;
输出
0.354
example2
$var =0.3000;
$var2 = number_format(floor($var * 1000) / 1000,3);
echo $var2;
output2
0.300
如果您的精度是可变的,那么您将不得不使用pow(10,$precision)
Example3
$var =0.3000;
$precision =3;
$var2 = number_format(floor($var * pow(10,$precision)) / pow(10,$precision),3);
output3
0.300