当我将其指定为.000021时,为什么PHP用科学计数法打印我的数字?

2020/12/24 06:21 · php ·  · 0评论

在PHP中,我有以下代码:

<?PHP
  $var = .000021;
  echo $var;
?>

输出为2.1E-5!

为什么?它应该打印.000021

使用number_format()获得您想要的东西:

print number_format($var, 5);

还要检查sprintf()

2.1E-5相同的数量0.000021。这就是它打印低于0.001的数字的方式。如果需要特定格式的文件,请使用printf()

编辑如果您不熟悉2.1E-5语法,则应该知道它是2.1×10 -5的简写这就是大多数编程语言如何用科学计数法表示数字的方式。

如果您想看到期望的数字,请使用number_formatsprintf

echo sprintf('%f', $var);
echo number_format($var, 6);

通常,数字是数字,而不是字符串,这意味着任何编程语言都将数字视为数字。因此,数字本身并不意味着任何特定格式(例如使用.000021代替2.1e-5)。这与显示带有前导零0.000021的数字(如)或对齐数字列表没有什么不同这是在任何编程语言中都会遇到的普遍问题:如果需要特定格式,则需要使用编程语言的格式功能来指定它。

当然,除非您将数字指定为字符串,然后在需要时将其转换为实数。一些语言可以隐式地执行此操作。

要显示最多8个小数位的数字,而在右边没有多余的零(如number_format那样,可能很烦人),请使用以下命令:

echo rtrim(rtrim(sprintf('%.8F', $var), '0'), ".");

先前的答案回答了OP问题,但是没有人提供执行此操作的代码。

使用此功能可以将任何数字
格式化
E-格式。

function format_amount_with_no_e($amount) {
    $amount = (string)$amount; // cast the number in string
    $pos = stripos($amount, 'E-'); // get the E- position
    $there_is_e = $pos !== false; // E- is found

    if ($there_is_e) {
        $decimals = intval(substr($amount, $pos + 2, strlen($amount))); // extract the decimals
        $amount = number_format($amount, $decimals, '.', ','); // format the number without E-
    }

    return $amount;
}

请注意,该函数将始终返回字符串。

编程语言具有用于将数字存储在内存中的不同方法。这由使用的数字类型决定。在您的情况下,您有一个很大的浮点数(分数)将被存储为定点数(分数的大小取决于其以这种方式存储)。

这是非常重要的功能,尤其是在处理非常大或非常小的数字时。例如,NASA或spaceX使用特殊的存储方法进行计算,以确保火箭在应有的位置重新进入地球轨道。

另外,不同的存储方法会占用不同的内存量。但是,上面提供的解决方案应该起作用。只要记住,四舍五入的错误可能发生在非常大或很小的数字上。

对于浮动,您可以使用

$var = '122.34343The';
echo floatval($var); // print 122.34343

可以使用int

echo intval(42000000); // 42000000
本文地址:http://php.askforanswer.com/dangwojiangqizhidingwei-000021shiweishenmephpyongkexuejishufadayinwodeshuzi.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!