PHP 截断小数
PHP cut off decimal
在 3 个字符后舍入(或截取)PHP 浮点数(不包括 0)的正确方法是什么?
Example:
0.12345 => 0.123
0.012345 => 0.0123
0.0001239 => 0.000124
您可以使用正则表达式来捕获与数字分隔的零和点并单独处理它们。
$arr = [0.12345,0.012345,0.0001239];
Foreach($arr as $val){
Preg_match("/([0\.]+)([0-9]+)/", $val, $match);
Echo $match[1]. Substr(round("0.".$match[2],3),2,3)."\n";
}
第一个捕获组的正则表达式是贪婪地抓取 0 和点,因此捕获序列中的任何点或零。
然后第二组捕获0-9,但是由于第一组贪婪所以不能从0开始。
所以第二组必须从 1-9 开始,然后是任何 0-9 数字。
你需要一些自定义的东西来检测由这个组成的零的数量
PHP - Find the number of zeros in a decimal number
并圆 http://php.net/manual/en/function.round.php
$num1 = 0.12345;
$num2 = 0.012345;
$num3 = 0.0001239;
echo "<br/><br/> Three zero places rounding number 1 : " . threeZeroPlaceRounding($num1);
echo "<br/><br/> Three zero places rounding number 2 : " . threeZeroPlaceRounding($num2);
echo "<br/><br/> Three zero places rounding number 3 : " . threeZeroPlaceRounding($num3);
function threeZeroPlaceRounding($number)
{
$numzeros = strspn($number, "0", strpos($number, ".")+1);
$numbplus = $number + 1;
return round($numbplus, $numzeros + 3) - 1;
}
输出为
三个零位舍入数字 1 : 0.123
三个零位舍入数字 2 : 0.0123
三个零位舍入数字 3 : 0.00012400000000001
请注意,我无法对第三个数字的四舍五入做很多事情,因为它有点奇怪
您可以使用一些增长率,这取决于您在 .
之后和第一个数字之前有多少零。相反 round
如果您只需要在 3 个字符后剪切,您可以使用 substr
。
$arr = [0.12345, 0.012345, 0.0001239];
$outputArr = [];
foreach ($arr as $arrValue) {
$zeroCount = strspn($arrValue, "0", strpos($arrValue, ".")+1);
$increaseRate = pow(10, $zeroCount);
$outputArr[] = (float)(round($arrValue*$increaseRate, 3)/$increaseRate);
}
print_r($outputArr);
在 3 个字符后舍入(或截取)PHP 浮点数(不包括 0)的正确方法是什么?
Example:
0.12345 => 0.123
0.012345 => 0.0123
0.0001239 => 0.000124
您可以使用正则表达式来捕获与数字分隔的零和点并单独处理它们。
$arr = [0.12345,0.012345,0.0001239];
Foreach($arr as $val){
Preg_match("/([0\.]+)([0-9]+)/", $val, $match);
Echo $match[1]. Substr(round("0.".$match[2],3),2,3)."\n";
}
第一个捕获组的正则表达式是贪婪地抓取 0 和点,因此捕获序列中的任何点或零。
然后第二组捕获0-9,但是由于第一组贪婪所以不能从0开始。
所以第二组必须从 1-9 开始,然后是任何 0-9 数字。
你需要一些自定义的东西来检测由这个组成的零的数量 PHP - Find the number of zeros in a decimal number 并圆 http://php.net/manual/en/function.round.php
$num1 = 0.12345;
$num2 = 0.012345;
$num3 = 0.0001239;
echo "<br/><br/> Three zero places rounding number 1 : " . threeZeroPlaceRounding($num1);
echo "<br/><br/> Three zero places rounding number 2 : " . threeZeroPlaceRounding($num2);
echo "<br/><br/> Three zero places rounding number 3 : " . threeZeroPlaceRounding($num3);
function threeZeroPlaceRounding($number)
{
$numzeros = strspn($number, "0", strpos($number, ".")+1);
$numbplus = $number + 1;
return round($numbplus, $numzeros + 3) - 1;
}
输出为
三个零位舍入数字 1 : 0.123
三个零位舍入数字 2 : 0.0123
三个零位舍入数字 3 : 0.00012400000000001
请注意,我无法对第三个数字的四舍五入做很多事情,因为它有点奇怪
您可以使用一些增长率,这取决于您在 .
之后和第一个数字之前有多少零。相反 round
如果您只需要在 3 个字符后剪切,您可以使用 substr
。
$arr = [0.12345, 0.012345, 0.0001239];
$outputArr = [];
foreach ($arr as $arrValue) {
$zeroCount = strspn($arrValue, "0", strpos($arrValue, ".")+1);
$increaseRate = pow(10, $zeroCount);
$outputArr[] = (float)(round($arrValue*$increaseRate, 3)/$increaseRate);
}
print_r($outputArr);