首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当数字中包含"E“时,如何设置小数点的精度?

当数字中包含"E“时,如何设置小数点的精度?
EN

Stack Overflow用户
提问于 2021-12-07 12:45:55
回答 2查看 115关注 0票数 3

我想把我的十进制修剪成类似8.063的东西,而不是原来的8.0638304611694E-9。我已经为它实现了一个函数,但是当其中有E-9时,它就不能工作了。我该修改哪一部分??

代码语言:javascript
复制
public function setPrecision($number, $decimals = 0)
{
    $negation = ($number < 0) ? (-1) : 1;
    $coefficient = 10 ** $decimals;
    return $negation * floor((string)(abs($number) * $coefficient)) / $coefficient;
}

编辑

当我试图调用函数时,当前的实现给了我0

代码语言:javascript
复制
setPrecision(8.0638304611694E-9, 3); // 0
EN

回答 2

Stack Overflow用户

发布于 2021-12-07 13:03:24

在PHP中,有(在编写时) 8519内建功能。他们中的一个很有可能做到了!

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

代码语言:javascript
复制
function setPrecision($number, $precision = 0)
{
    $exponent = floor(log10($number)) - 1;
    return round($number, -$exponent + $precision - 1);
}
票数 0
EN

Stack Overflow用户

发布于 2021-12-07 14:40:36

与一定数量的数字的相对舍入可以很容易地用sprintf完成。

代码语言:javascript
复制
$round = (float)sprintf('%0.3E', 8.0638304611694E-9);
var_dump($round);  //float(8.064E-9)

在此基础上,我有一个函数,它以一定的相对十进制精度舍入浮点数。

代码语言:javascript
复制
 /*
  * @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

代码语言:javascript
复制
  $float = 0.0000123456789;
  $newFloat = roundPrecision($float,5);
  printf('%0.10f',$newFloat);  //0.0000123460

例2

代码语言:javascript
复制
  $float = 3456.7891234;
  $newFloat = roundPrecision($float,5);
  printf('%0.10f',$newFloat);  //3456.8000000000
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70260389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档