当前位置: 首页 > 知识库问答 >
问题:

当数字中包含“E”时,如何设置小数点的精度?[副本]

公孙俭
2023-03-14

我想把小数点改成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

共有2个答案

夔建章
2023-03-14

在PHP中,有(在编写的时候)8519个内置函数。其中一个可能会成功!

您可以在函数中使用log10()round()

php prettyprint-override">function setPrecision($number, $precision = 0)
{
    $exponent = floor(log10($number)) - 1;
    return round($number, -$exponent + $precision - 1);
}

曹子平
2023-03-14

相对舍入一定数量的数字可以很容易地完成与斯普林特。

$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位。我希望删除小数之后的所有内容。包括小数。

  • 问题内容: 如果我有以下小数点数字: 然后我得到以下输出: 我想要的是: 问题答案: 可能令人困惑的部分是 的表示整个数(包括小数)的长度,而不仅仅是小数之前的部分。该代表的小数位数。 因此,要使格式正确无误,最多可以有小数点前4个数字和小数点后3个位,实际上是所需的格式。

  • 我正在打印一个矩阵,每个元素都有相同的长度打印在屏幕上,以便于阅读。 如果我做了这样的事情: 然后根据前面的(全部)值,我得到不同的长度: 提供以下输出: 这让矩阵变得一团糟。如何将整个double(包括小数和整数)限制在一定的长度?因此,对于之前的案例,输出将是: 编辑#1 我不想只是用零填充。前导零没有吸引力,可能导致误读。即使我现在有,我可能会使用更少的精度,并且每个数字都是有效的(非零)。

  • 问题内容: 我从数据库中得到一个数字,这个数字可能是或。 我需要将数字的小数精度设置为,这会使数字不超过(关于小数)或。 使用PHP 我看到一个问题: 四舍五入数字。我需要一个仅将小数点缩短而不改变其值的函数,而这些值似乎不遵循。 问题答案: 您可以用来实现以下目的: 这将转换为。 但是,如果您只想将小数位数缩短到3,而 不是 四舍五入,则可以执行以下操作: 乍一看可能令人生畏,但是这个概念确实很

  • 问题内容: 例如,当我拆分字符串时,我想检查一下我的第一部分是否仅包含数字和小数点。 我做了以下 但这仅检查数字而不是小数。如何在其中检查小数?例如,我想检查0.12.13.14是否可以正常工作,而像0.12.13.14x这样的东西将无法工作。 问题答案: 在正则表达式中添加点字符,如下所示: 该是允许多个数字/小数点。 在情况下,至少一个数字/小数点是必需的,代替具有用于一个或多个出现。 编辑: