如何使用 PHP 截取小数
How to cut decimal number using PHP
我有一个代码,我得到了一些这样的数字:
92.682926829268
我想这样剪:
92.68
这是我的代码:
<td><?php if (($row['TotalMatch']) > 10){ echo ($row['OK_05'] / $row['TotalMatch']) * 100; } ?></td>
我尝试使用 floor 和 round,但我得到了我在 post 开头展示的示例(92.682926829268 而不是 92.68)
感谢您的关注
此致!
EDIT 你能给我一个代码示例吗?谢谢
使用 sprintf()
格式化数字。
echo sprintf("%.2f", 92.682926829268);
可以使用圆函数
$var = 92.682926829268;
$var = round($var, 2)
或使用sprintf(%.2f
截数)
$var = sprintf("%.2f", $var);
尝试像下面这样使用 sprintf:
<?php
$mynumber = 98.343434;
echo sprintf('%.2f', $mynumber); // this will output 98.34
您可以使用 bcdiv()
bcdiv($row['OK_05'], ($row['TotalMatch'] * 100), 2);
您要格式化的表达式是这样的:
($row['OK_05'] / $row['TotalMatch']) * 100
因此,无论您决定使用哪个函数,都需要绕过该表达式。
至于使用哪个函数,你需要select一个returns字符串,而不是浮点数。
如果您使用 round
,并且您的表达式 returns 是一个四舍五入为小数点后有两个零的数字的浮点数,则结果中不会显示尾随零。例如,echo round(92.0006829268, 2)
将显示 92
, 而不是 92.00
。因此,如果您需要确保始终显示两位小数,请不要使用 round
。 round
是数学函数,不是格式化函数。
floor
在这里真的没有用,因为它 returns 一个没有小数位的数字。
一个简单的方法是使用sprintf
,如其他一些答案所示。
echo sprintf("%.2f", ($row['OK_05'] / $row['TotalMatch']) * 100);
sprintf
的第一个参数是"%.2f"
,这是一个格式字符串,表示第二个参数应该显示为带两位小数的浮点数。第二个参数是你的表达。
按照其他答案中的建议使用 bcdiv
也可以,但它的工作方式与 sprintf
略有不同,并且在某些情况下会产生略微不同的结果。
sprintf
将四舍五入到指定的小数位数,例如
echo sprintf("%.2f", 926.89 / 10); // outputs 92.69
和 bcdiv
将截断,因此
echo bcdiv(926.89, 10, 2); // outputs 92.68
无论哪一个适合你,就去做。
我有一个代码,我得到了一些这样的数字:
92.682926829268
我想这样剪:
92.68
这是我的代码:
<td><?php if (($row['TotalMatch']) > 10){ echo ($row['OK_05'] / $row['TotalMatch']) * 100; } ?></td>
我尝试使用 floor 和 round,但我得到了我在 post 开头展示的示例(92.682926829268 而不是 92.68)
感谢您的关注
此致!
EDIT 你能给我一个代码示例吗?谢谢
使用 sprintf()
格式化数字。
echo sprintf("%.2f", 92.682926829268);
可以使用圆函数
$var = 92.682926829268;
$var = round($var, 2)
或使用sprintf(%.2f
截数)
$var = sprintf("%.2f", $var);
尝试像下面这样使用 sprintf:
<?php
$mynumber = 98.343434;
echo sprintf('%.2f', $mynumber); // this will output 98.34
您可以使用 bcdiv()
bcdiv($row['OK_05'], ($row['TotalMatch'] * 100), 2);
您要格式化的表达式是这样的:
($row['OK_05'] / $row['TotalMatch']) * 100
因此,无论您决定使用哪个函数,都需要绕过该表达式。
至于使用哪个函数,你需要select一个returns字符串,而不是浮点数。
如果您使用 round
,并且您的表达式 returns 是一个四舍五入为小数点后有两个零的数字的浮点数,则结果中不会显示尾随零。例如,echo round(92.0006829268, 2)
将显示 92
, 而不是 92.00
。因此,如果您需要确保始终显示两位小数,请不要使用 round
。 round
是数学函数,不是格式化函数。
floor
在这里真的没有用,因为它 returns 一个没有小数位的数字。
一个简单的方法是使用sprintf
,如其他一些答案所示。
echo sprintf("%.2f", ($row['OK_05'] / $row['TotalMatch']) * 100);
sprintf
的第一个参数是"%.2f"
,这是一个格式字符串,表示第二个参数应该显示为带两位小数的浮点数。第二个参数是你的表达。
按照其他答案中的建议使用 bcdiv
也可以,但它的工作方式与 sprintf
略有不同,并且在某些情况下会产生略微不同的结果。
sprintf
将四舍五入到指定的小数位数,例如
echo sprintf("%.2f", 926.89 / 10); // outputs 92.69
和 bcdiv
将截断,因此
echo bcdiv(926.89, 10, 2); // outputs 92.68
无论哪一个适合你,就去做。