Ric*_*haw 521 php formatting numbers rounding number-formatting
将PHP字符串舍入到2位小数的正确方法是什么?
$number = "520"; // It's a string from a database
$formatted_number = round_to_2dp($number);
echo $formatted_number;
Run Code Online (Sandbox Code Playgroud)
输出应该是520.00;
round_to_2dp()功能定义应该如何?
Cod*_*nci 1052
你可以使用number_format():
return number_format((float)$number, 2, '.', '');
Run Code Online (Sandbox Code Playgroud)
例:
$foo = "105";
echo number_format((float)$foo, 2, '.', ''); // Outputs -> 105.00
Run Code Online (Sandbox Code Playgroud)
此函数返回一个字符串.
Mar*_*c B 185
或者,
$padded = sprintf('%0.2f', $unpadded); // 520 -> 520.00
Run Code Online (Sandbox Code Playgroud)
Som*_*luk 175
使用round()(如果您只期望浮点格式的数字,请使用,否则使用number_format()作为Codemwnci给出的答案):
echo round(520.34345, 2); // 520.34
echo round(520.3, 2); // 520.3
echo round(520, 2); // 520
Run Code Online (Sandbox Code Playgroud)
从手册:
描述:
Run Code Online (Sandbox Code Playgroud)float round(float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]]);返回
val指定的舍入值precision(小数点后的位数).精度也可以是负数或零(默认值).
...
示例#1
precision示例Run Code Online (Sandbox Code Playgroud)<?php echo round(3.4); // 3 echo round(3.5); // 4 echo round(3.6); // 4 echo round(3.6, 0); // 4 echo round(1.95583, 2); // 1.96 echo round(1241757, -3); // 1242000 echo round(5.045, 2); // 5.05 echo round(5.055, 2); // 5.06 ?>示例#2模式示例
Run Code Online (Sandbox Code Playgroud)<?php echo round(9.5, 0, PHP_ROUND_HALF_UP); // 10 echo round(9.5, 0, PHP_ROUND_HALF_DOWN); // 9 echo round(9.5, 0, PHP_ROUND_HALF_EVEN); // 10 echo round(9.5, 0, PHP_ROUND_HALF_ODD); // 9 echo round(8.5, 0, PHP_ROUND_HALF_UP); // 9 echo round(8.5, 0, PHP_ROUND_HALF_DOWN); // 8 echo round(8.5, 0, PHP_ROUND_HALF_EVEN); // 8 echo round(8.5, 0, PHP_ROUND_HALF_ODD); // 9 ?>
Sys*_*X17 32
http://php.net/manual/en/function.round.php
例如
echo round(5.045, 2); // 5.05
echo round(5.055, 2); // 5.06
Run Code Online (Sandbox Code Playgroud)
小智 24
尝试:
$number = 1234545454;
echo $english_format_number = number_format($number, 2);
Run Code Online (Sandbox Code Playgroud)
输出将是:
1,234,545,454.00
Run Code Online (Sandbox Code Playgroud)
pan*_*kaj 21
使用round(yourValue,decimalPoint)(php 手册\xe2\x80\x99s 页面)或number_format(yourValue,decimalPoint);
number_format()以字符串形式返回值,例如1,234.67类型。因此在这种情况下您不能使用它进行加法或任何计算。如果你尝试那么你必须处理数字格式错误......
在这种情况下round(121222.299000000,2),这将是更好的选择。\n结果将是121222.29 ...
Adi*_*att 14
你可以使用php printf或sprintf函数:
示例sprintf:
$num = 2.12;
echo sprintf("%.3f", $num);
Run Code Online (Sandbox Code Playgroud)
没有echo那么你可以运行相同的,sprintf("%.3f", $num);
输出:
2.120
Run Code Online (Sandbox Code Playgroud)
或者,用printf:
echo printf("%.2f", $num);
Run Code Online (Sandbox Code Playgroud)
输出:
2.124
Run Code Online (Sandbox Code Playgroud)
pow*_*tac 12
解决此问题的另一种更奇特的方法是使用bcadd()$ right_operand的虚拟值0.
$formatted_number = bcadd($number, 0, 2);
Run Code Online (Sandbox Code Playgroud)
San*_*mal 11
使用PHP number_format()函数.例如
$num = 7234545423;
echo number_format($num, 2);
Run Code Online (Sandbox Code Playgroud)
输出将是:
7,234,545,423.00
在这里,我.使用函数在(点)后得到两位小数...
function truncate_number($number, $precision = 2) {
// Zero causes issues, and no need to truncate
if (0 == (int)$number) {
return $number;
}
// Are we negative?
$negative = $number / abs($number);
// Cast the number to a positive to solve rounding
$number = abs($number);
// Calculate precision number for dividing / multiplying
$precision = pow(10, $precision);
// Run the math, re-applying the negative value to ensure
// returns correctly negative / positive
return floor( $number * $precision ) / $precision * $negative;
}
Run Code Online (Sandbox Code Playgroud)
上述函数的结果:
echo truncate_number(2.56789, 1); // 2.5
echo truncate_number(2.56789); // 2.56
echo truncate_number(2.56789, 3); // 2.567
echo truncate_number(-2.56789, 1); // -2.5
echo truncate_number(-2.56789); // -2.56
echo truncate_number(-2.56789, 3); // -2.567
Run Code Online (Sandbox Code Playgroud)
新的正确答案
使用 PHP 原生函数bcdiv
echo bcdiv(2.56789, 1, 1); // 2.5
echo bcdiv(2.56789, 1, 2); // 2.56
echo bcdiv(2.56789, 1, 3); // 2.567
echo bcdiv(-2.56789, 1, 1); // -2.5
echo bcdiv(-2.56789, 1, 2); // -2.56
echo bcdiv(-2.56789, 1, 3); // -2.567
Run Code Online (Sandbox Code Playgroud)
添加到其他答案,因为 number_format() 默认情况下会添加千位分隔符。
要删除它,请执行以下操作:
$number = number_format($number, 2, ".", "");
Run Code Online (Sandbox Code Playgroud)
round_to_2dp 是用户定义的函数,除非您发布了该函数的声明,否则无法执行任何操作
但是,我的猜测是这样做的 number_format($number, 2);
bcdiv($number, 1, 2) // 2 varies for digits after the decimal point
Run Code Online (Sandbox Code Playgroud)
这将在十进制后正好显示两位数.
优点: 如果要仅在浮点值后显示两位数而不是int,则使用此值.
我自己做.
$decimals = 2;
$number = 221.12345;
$number = $number * pow(10, $decimals);
$number = intval($number);
$number = $number / pow(10, $decimals);
Run Code Online (Sandbox Code Playgroud)
对于有条件的舍入,即.显示小数,它确实需要,否则整数
123.56 => 12.56
123.00 => 123
$somenumber = 123.56;
$somenumber = round($somenumber,2);
if($somenumber == intval($somenumber))
{
$somenumber = intval($somenumber);
}
echo $somenumber; // 123.56
$somenumber = 123.00;
$somenumber = round($somenumber,2);
if($somenumber == intval($somenumber))
{
$somenumber = intval($somenumber);
}
echo $somenumber; // 123
Run Code Online (Sandbox Code Playgroud)
小智 5
$retailPrice = 5.989;
echo number_format(floor($retailPrice*100)/100,2, '.', '');
Run Code Online (Sandbox Code Playgroud)
如果没有舍入数字,它将返回5.98.
小智 5
$number = sprintf('%0.2f', $numbers); // 520.89898989 -> 520.89
Run Code Online (Sandbox Code Playgroud)
这将在小数点后给你2个数字.
小智 5
$twoDecNum = sprintf('%0.2f', round($number, 2));
Run Code Online (Sandbox Code Playgroud)
如果四舍五入后恰好只有1个小数位,则四舍五入会正确舍入该数字,并且sprintf会将其强制为小数点后2位。
如果要在整个项目中使用两位十进制数字,可以定义:
bcscale(2);
Run Code Online (Sandbox Code Playgroud)
然后以下函数将产生您想要的结果:
$myvalue = 10.165445;
echo bcadd(0, $myvalue);
// result=10.11
Run Code Online (Sandbox Code Playgroud)
但是如果不使用 bcscale 函数,则需要编写如下代码才能得到想要的结果。
$myvalue = 10.165445;
echo bcadd(0, $myvalue, 2);
// result=10.11
Run Code Online (Sandbox Code Playgroud)
了解更多
| 归档时间: |
|
| 查看次数: |
1031860 次 |
| 最近记录: |