添加数字时得到不同的结果

Posted

技术标签:

【中文标题】添加数字时得到不同的结果【英文标题】:Getting different results when adding numbers 【发布时间】:2015-03-17 23:09:34 【问题描述】:

我目前正在 php(货币)中做一些简单的十进制数字相加,但由于某种原因,我可以将相同的数字相加两次并得到不同的结果。

我正在做的是从 PHP 中的 mysql 表中获取一些行,将每个收据的总数相加并将结果以十进制 (10,2) 的形式存储在另一个 MySQL 表中:

 <?php   
foreach($query_result as $row) 
     $total_receipts = $total_receipts + $row['total'];

     //my locale requires commas as decimal separators and points for thousands:
     echo number_format($total_receipts,2,",",".");
     
  ?>

奇怪的是,我可以在完全相同的行上执行两次相同的操作,并得到两个不同的结果,关于小数点。例如,当我添加以下数字时:

3621.94
1230.29
1025.00
1025.00

第一次在数据库中插入正确的值 6902.23。当我第二次运行它时,插入数据库的值为 6.90。 由于某种原因,第二次决定移动小数点。

我没有使用 number_format() 插入数据库,我存储 $total_receipts 没有修改。

在这个特定的例子中,错误出现在第二次尝试中,但有时它会在第一次出现而第二次是正确的。有时我什至无法复制错误。

我做错了什么?我一直在阅读有关 bcmath 的文章,但我不确定是否应该将它用于这个简单的加法。

【问题讨论】:

您是否检查过在将值硬编码到变量时或仅在从 db 读取时是否遇到相同类型的问题? PHP Adding 2 decimal points numbers (money) gives wrong results in total amount的可能重复 使用货币时的规则 #1:永远不要将货币单位存储或精心设计为浮点数/小数!始终使用整数,以美分表示(例如,2.12 美元 = 212 美分并存储整数)。这不仅可以解决浮动操作带来的痛苦,而且不会遇到语言环境等问题 @developerwjk 我尝试用硬编码值复制它 4 次,但不能。我会继续测试。 @Qualcuno 我从 MySQL 读取的原始值来自具有以下类型值的 CSV 文件: 1762.229 。那应该是 1762.23,但如果我乘以 100,我会得到 176222.9。我该如何处理? 【参考方案1】:

请使用 number_format() 插入数据库:

<?php
$total_receipts = 0; //Always initialize vars
foreach($query_result as $row) 
    $total_receipts += $row['total'];

    //this way to insert into DB
    echo number_format($total_receipts, 2, ".", "");

?>

【讨论】:

以上是关于添加数字时得到不同的结果的主要内容,如果未能解决你的问题,请参考以下文章

当数字附加零时,无符号数字显示不同的结果[重复]

使用多个内部联接时,与使用单个内部联接时相比,我得到不同的结果

在解析 JSON 数据时,我从相同的 url 得到不同的结果

PHPMyAdmin - 总记录数不同

每次我使用 scikit 运行线性回归时都会得到不同的结果

为啥使用相同的 Keras 模型和输入进行预测时会得到不同的结果?