我想把小数点改成8.063
,而不是原来的8.0638304611694E-9
。我已经为它实现了一个函数,但是当它中有E-9
时,它就不起作用了。我应该修改哪个部分??
public function setPrecision($number, $decimals = 0)
{
$negation = ($number < 0) ? (-1) : 1;
$coefficient = 10 ** $decimals;
return $negation * floor((string)(abs($number) * $coefficient)) / $coefficient;
}
编辑
当我尝试调用函数时,当前实现给我的0
。
setPrecision(8.0638304611694E-9, 3); // 0
在PHP中,有(在编写的时候)8519个内置函数。其中一个可能会成功!
您可以在函数中使用log10()
和round()
:
php prettyprint-override">function setPrecision($number, $precision = 0)
{
$exponent = floor(log10($number)) - 1;
return round($number, -$exponent + $precision - 1);
}
相对舍入一定数量的数字可以很容易地完成与斯普林特。
$round = (float)sprintf('%0.3E', 8.0638304611694E-9);
var_dump($round); //float(8.064E-9)
在此基础上,我有一个函数,它以一定的相对十进制精度对浮点数进行轮询。
/*
* @return Float-Value with reduced precision
* @param $floatValue: input (float)
* @param $overallPrecision: 1..20 (default 10)
*/
function roundPrecision($floatValue, $overallPrecision = 10)
{
$p = min(20,max(0,$overallPrecision-1));
$f =(float)sprintf('%.'.$p.'e',$floatValue);
return $f;
}
例1
$float = 0.0000123456789;
$newFloat = roundPrecision($float,5);
printf('%0.10f',$newFloat); //0.0000123460
例二
$float = 3456.7891234;
$newFloat = roundPrecision($float,5);
printf('%0.10f',$newFloat); //3456.8000000000
我想把我的十进制修剪成像8.063这样的东西,而不是原来的E-98.0638304611694。我已经为它实现了一个函数,但是当它里面有时,它就不起作用了。我应该修改哪一部分?? 编辑 当我尝试调用函数时,当前实现给了我。
my我希望它只显示。我该怎么做?这就是我尝试过的- 但这只是四舍五入到2位。我希望删除小数之后的所有内容。包括小数。
我正在打印一个矩阵,每个元素都有相同的长度打印在屏幕上,以便于阅读。 如果我做了这样的事情: 然后根据前面的(全部)值,我得到不同的长度: 提供以下输出: 这让矩阵变得一团糟。如何将整个double(包括小数和整数)限制在一定的长度?因此,对于之前的案例,输出将是: 编辑#1 我不想只是用零填充。前导零没有吸引力,可能导致误读。即使我现在有,我可能会使用更少的精度,并且每个数字都是有效的(非零)。
问题内容: 我从数据库中得到一个数字,这个数字可能是或。 我需要将数字的小数精度设置为,这会使数字不超过(关于小数)或。 使用PHP 我看到一个问题: 四舍五入数字。我需要一个仅将小数点缩短而不改变其值的函数,而这些值似乎不遵循。 问题答案: 您可以用来实现以下目的: 这将转换为。 但是,如果您只想将小数位数缩短到3,而 不是 四舍五入,则可以执行以下操作: 乍一看可能令人生畏,但是这个概念确实很
问题内容: 如果我有以下小数点数字: 然后我得到以下输出: 我想要的是: 问题答案: 可能令人困惑的部分是 的表示整个数(包括小数)的长度,而不仅仅是小数之前的部分。该代表的小数位数。 因此,要使格式正确无误,最多可以有小数点前4个数字和小数点后3个位,实际上是所需的格式。
问题内容: 例如,当我拆分字符串时,我想检查一下我的第一部分是否仅包含数字和小数点。 我做了以下 但这仅检查数字而不是小数。如何在其中检查小数?例如,我想检查0.12.13.14是否可以正常工作,而像0.12.13.14x这样的东西将无法工作。 问题答案: 在正则表达式中添加点字符,如下所示: 该是允许多个数字/小数点。 在情况下,至少一个数字/小数点是必需的,代替具有用于一个或多个出现。 编辑: