【问题标题】:How to convert decimals correctly after calculation计算后如何正确转换小数
【发布时间】:2018-06-04 11:23:52
【问题描述】:

我有以下问题,如何让它在乘法后显示为字符串0.00004?

$v = -0.00004;
$v = $v * -1;
echo $v; // 4.0E-5

长篇大论

因此我需要保存到 MySQL 数据库中,但没有问题,因为我使用以下查询:

$sql_insert = $conn->prepare("insert into tbl_transaction (amount) values ($v)");

但是,当我输出到我的 HTML 时,它显示 4.0E-5。我尝试使用 number_format,但在某些情况下小数会远远超过这个,所以它不是一个选择。

【问题讨论】:

  • 看看 number_format() 函数
  • MySQL 理解指数格式,4.0e-5 有什么问题?
  • @Barmar 问题是我需要在 HTML 中正确显示 0.00004
  • 那为什么问题是保存到数据库中?
  • 使用带有大量数字的number_format,例如number_format($v, 20)

标签: php html mysql


【解决方案1】:

如果您在第一次分配后var_dump($v),您会发现“问题”不是计算。

$v = -0.00004;
var_dump($v);  //float(-4.0E-5)

number_format() 可用于返回值的格式化版本。您可以获取字符串值的长度,并将其传递给 number_format。

var_dump(number_format($v,strlen(strval($v)))); // string(10) "-0.0000400"

所以,你的代码是:

$v = -0.00004;
$v = $v * -1;
$v = number_format($v,strlen(strval($v)));
echo $v  //0.000040

在您准备好显示该值之前,您不需要使用 number_format,因为指数数与格式化/十进制数的值相同。

【讨论】:

    【解决方案2】:

    使用所需精度格式化数字后,您需要去除尾随零。

    这应该可以解决问题:

    $v = -0.00004;
    $v = number_format($v * -1, 20);
    print rtrim($v, 0);
    

    【讨论】:

      【解决方案3】:

      你可以尝试如下。

      $v = -0.00004;
      $v = $v * -1;
      echo number_format($v, 5);
      

      希望这会有所帮助。

      【讨论】:

        【解决方案4】:

        试试这个。

        echo sprintf('%f', $v);
        

        或者:

        $b = sprintf('%f', $v);
        echo $b;
        

        【讨论】:

        • 不能,它正在返回0.000040
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-29
        • 2018-04-03
        • 2017-02-14
        • 2023-02-24
        • 2019-09-29
        相关资源
        最近更新 更多