我想格式化(圆)浮点(双)数字,让我们说2位有效数字,例如:
1 => 1
11 => 11
111 => 110
119 => 120
0.11 => 0.11
0.00011 => 0.00011
0.000111 => 0.00011
Run Code Online (Sandbox Code Playgroud)
所以任意精度保持不变
我希望它已经内置了一些不错的功能,但到目前为止找不到任何功能
我被指向如何向下舍入到最近的有效数字,这是关闭但不适用于N位有效数字,我不知道它对0.000XXX数字有什么作用
为了将数字四舍五入为n个有效数字,您需要找到数字的大小(以10的幂为单位),然后从n中减去。
这对于简单的四舍五入效果很好:
function sigFig($value, $digits)
{
if ($value == 0) {
$decimalPlaces = $digits - 1;
} elseif ($value < 0) {
$decimalPlaces = $digits - floor(log10($value * -1)) - 1;
} else {
$decimalPlaces = $digits - floor(log10($value)) - 1;
}
$answer = round($value, $decimalPlaces);
return $answer;
}
Run Code Online (Sandbox Code Playgroud)
这将给出以下结果:
0.0001234567返回0.0001235
123456.7返回123500
但是,一个值(例如10到4个有效数字)应严格表示为10.00,以表示该值的精确度。
如果这是所需的输出,则可以使用以下命令:
function sigFig($value, $digits)
{
if ($value == 0) {
$decimalPlaces = $digits - 1;
} elseif ($value < 0) {
$decimalPlaces = $digits - floor(log10($value * -1)) - 1;
} else {
$decimalPlaces = $digits - floor(log10($value)) - 1;
}
$answer = ($decimalPlaces > 0) ?
number_format($value, $decimalPlaces) : round($value, $decimalPlaces);
return $answer;
}
Run Code Online (Sandbox Code Playgroud)
现在1显示为1.000
| 归档时间: |
|
| 查看次数: |
2785 次 |
| 最近记录: |