【问题标题】:PHP Limiting Digits After Comma In Decimals Multiplication Result [duplicate]PHP限制小数乘法结果中逗号后的数字[重复]
【发布时间】:2018-06-23 19:16:46
【问题描述】:

我有这个代码:

$number_1 = 0.01;
$number_2 = 3.22321;
$result = $number_1 * $number_2;

结果是:0.0322321

如何将$result 的十进制数字与$number_1 相同,在这种情况下,我期待0.03(逗号后两位)。

更新$number_1 在逗号后并不总是有 2 位数字。这是随机的。

【问题讨论】:

  • round($result,2) php 函数?

标签: php


【解决方案1】:

只是添加另一个选项,并在尝试记住一些数学之后......

$number_1 = 0.01;
$number_2 = 3.22321;
$result = $number_1 * $number_2;
echo round($result,log10(1/$number_1));

【讨论】:

  • 完整的数学答案,我认为它更好。
  • 如果数字有更多小数,这不起作用。 3v4l.org/TKFea
  • @Andreas 不确定 0.01001 的 $number_1 的值是否在 OP 要求的范围内 - 0.00001 有效,尽管即使 $result = $number_1 * round($number_2); 适用于这种情况。随着各种赞成票和反对票的进行,这似乎不是一个特别明确的问题,我认为您的答案是一个更通用的解决方案(因此赞成票)。
  • 我的意思是说有些东西在数学上是不正确的,或者不是所有数字都可以进行数学运算。如果这是在范围内或范围之外,则由 OP 回答。我更质疑为什么你的答案不起作用而不是指出它是一个错误。感谢您的支持,我很乐意对您做同样的事情,这是一个很好的解决方案,即使它似乎在某些数字上失败了。
  • @Andreas,我很高兴受到挑战,因为总是有可能错过一些东西,它也可能让 OP 提前发现潜在问题。如您所知,如果答案可行/可修复,我也会挑战其他人并且更愿意这样做而不是投反对票。
【解决方案2】:

你想要这样的东西:

<?php
$number_1 = 0.01;
$number_2 = 3.22321;
$result = $number_1 * $number_2;

$num_des = strlen(substr(strrchr($number_1, "."), 1));

echo round($result,$num_des);

?>

【讨论】:

【解决方案3】:

您可以计算 $number_1 中的小数位数并在 number_format 函数中使用它。

$decimals = strlen($number_1) - strpos($number_1, ".")-1;

echo number_format($result, $decimals); //0.03

https://3v4l.org/fGW5N

【讨论】:

  • @Nigel 这是一个复制粘贴错误。我的浏览器重新加载并删除了我的-1。现已更正
【解决方案4】:

您可以使用printf()/sprintf():

$val = 1.234;
printf('%.2f', $val);

number_format():

$val = 1.234;
echo number_format($val, 2, '.', '');

【讨论】:

    【解决方案5】:

    编辑:编辑后,解决方案是: PHP: get number of decimal digits

    像这样:

    round(0.0322321, strlen(substr(strrchr($number_1, "."), 1)));
    

    echo round(0.0322321, 2);  // 0.03
    

    http://php.net/manual/fr/function.round.php

    【讨论】:

    • 好吧,在这种情况下,$number_1 在逗号后并不总是有 2 位数字。
    • 这个答案怎么会得到如此多的支持,因为这甚至不是操作要求的?
    • 因为 op 并不清楚这个含义。
    • 如何使 $result 的十进制数字与 $number_1 相同。怎么不清楚?
    • @Andreas 我期待 0.03(逗号后 2 位)。
    猜你喜欢
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 2016-08-26
    • 2015-10-05
    • 2018-01-05
    • 1970-01-01
    • 2014-11-21
    • 2012-02-08
    相关资源
    最近更新 更多