PHP 简单乘法的舍入误差[重复]

2023-12-15

PHP 在使用时似乎舍入不正确(int)来转换变量。为什么?

$multiplier = 100000000;
$value = 0.01020637;
echo (int)($value*$multiplier);

Output: 1020636. (意外的输出)

$multiplier = 100000000;
$value = 0.01020637;
echo ($value*$multiplier);

Output: 1020637。 (预期正确输出)

编辑:情况变得更糟......

$multiplier = 100000000;
$value = 0.01020637;
echo $temp = ($value*$multiplier);
echo '<br/>';
echo (int)$temp;

Output:

1020637

1020636


当您处理浮点数时,事情可能会变得棘手,浮点数学(以及涉及的问题)很好理解,但可能会在您没有预料到时突然出现。就像这里发生的那样。你可以阅读规则广泛地使用,或者在处理浮点运算时使用语言提供的工具。

当您关心所涉及的精度时,您应该使用bcmul()功能。这是一个“可选”扩展,但如果您关心精度,那么很快就会开始需要它。

Example:

multiplier = 100000000;
$value = 0.01020637;
echo (int)($value*$multiplier);
echo "\n";
echo bcmul($value, $multiplier, 0);

Sample: http://ideone.com/Wt9kKb

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 简单乘法的舍入误差[重复] 的相关文章

随机推荐

  • Slim 框架:不允许使用方法 不允许使用方法。必须是以下之一:POST

    我正在 PHP 中设置 REST 服务器 并希望允许客户端使用具有不同方法的端点 例如 GET POST PUT DELETE 等 但是 当我尝试添加 POST 方法的函数时 出现了一个问题 如果我尝试通过 Postman 使用 POST
  • Xgboost 随机种子设置不能确保再现能力

    尽管设定了一个值random state and or seed参数 性能不可重现XgboostSklearn API 包装器 这是代码 from xgboost sklearn import XGBClassifier from skle
  • QWidget不绘制背景色

    我正在使用 PySide 1 2 1 和 Python 2 7 我需要一个小部件来绘制彩色背景 在 Qt Designer 中 我创建了一个简单的窗口 其中包含一个标签 一个包含三个其他项目的小部件和另一个标签 对于包含按钮 单选按钮和复选
  • 如何使 1 + 1 = 2 而不是 1 + 1 = 11 [重复]

    这个问题在这里已经有答案了 我试图以数学方式添加数字 但它不断添加后面的数字 它获取 id 编号 begen 然后获取另一个 div 内的编号 kacbegen var begen this attr id var kacbegen mat
  • 通过 CSS 选择器选择两个已知元素之间的所有元素

    我有两个已定义 id 的元素 它们之间有任何 html 例如 div Hello div div Example div hr a href Example a div World div 是否有 CSS 选择器可以选择 d1 和 d2 之
  • HTTP 状态 500 - Servlet appServlet 的 Servlet.init() 引发异常

    我想尝试一个简单的程序 但出现以下错误 我正在使用 Eclipse Kelper 和 Tomcat 7 0 尝试了很多事情 但没有什么对我有用 HTTP Status 500 Servlet init for servlet appServ
  • Firebase 安全规则阻止写入 Firebase

    注 此问题已标记 polymer 因为 Polymer 库用于生成 Javascript 这个问题是关于处理 Firebase 安全性的两个不同但相关的问题 在尝试让 Firebase 安全规则发挥作用时 问题 1 和问题 2 似乎提出了相
  • Javascript 通过匹配字符串对数组进行排序

    我有一个包含地理位置代码结果的数组 我想按与我搜索过的术语最接近的匹配项对其进行排序 例子 搜索 Pizza Array Pizza Uno Pizzeria Uno Burgers and Pizzeria Cino Pizzeria 排
  • 如何绕过 Swagger-UI 的身份验证?

    如何从浏览器绕过 Swagger UI 的令牌身份验证 我可以通过 Postman 向 Swagger UI 发出请求 当我从浏览器发出请求时 我收到错误 因为它请求令牌 http localhost 8080 swagger ui ind
  • 如何使用所需的 BSTR* 参数正确调用 IDispatch::Invoke

    有很多关于如何使用 BSTR 参数调用 IDispatch Invoke 的示例 我将此与许多其他 SomeType 参数一起使用 但无论我尝试什么 我要么得到类型不匹配的HRESULT E OUTOFMEMORY 要么得到访问冲突 在我看
  • 为什么我不能简单地将安装的 Perl 模块复制到其他机器上?

    我对 Perl 很陌生 但对动态语言还不太熟悉 我对模块的管理如此不直接感到有点惊讶 Sure cpan X理论上确实有效 但我正在从三台不同的机器和操作系统上处理同一个项目 在工作中 在家里 在外部环境中进行测试 在工作中 Windows
  • 使用内容值的更新方法

    Helper public boolean mMessagesSent String ID int Data SQLiteDatabase db this getWritableDatabase ContentValues contentV
  • 调用非对象上的成员函数 num_rows()

    我正在使用 CodeIgniter 并且我想从数据库中的表中获取一些数据 在我的模型中 我有这个功能 public function fetch cours limit start element id element this gt db
  • 使用 Python 请求在请求之间设置新的 cookie

    我现在正在这样做 但在最后一行失败了TypeError expected string or buffer import requests from urllib parse import urlparse url some url s r
  • Rake 无法迁移

    C Users MEGHA bbbb gt rake db migrate rake aborted SyntaxError C Users MEGHA bbbb db migrate 20140402130040 create comme
  • Python zip 单个列表元素

    我有这个 t 1 2 3 4 5 6 11 22 33 44 55 66 并想要得到这个 1 4 11 44 2 5 22 55 3 6 33 66 如何以Pythonic方式做到这一点 使用星号 它可以解压参数列表 gt gt gt zi
  • 创建表时出错

    在 MySQL 终端上粘贴以下 MySQL 命令后 出现以下错误 此代码是我从项目的生产环境中获取的 我想根据生产环境的数据库更新本地数据库 mysql gt CREATE TABLE cityguide pointofinterest g
  • 我可以将自己的jsp页面导入到另一个jsp页面中吗?

    我已经使用 netbeans 准备了一个静态 html 页面 我可以将该页面导入到另一个页面中 以便不再重新编写代码 然后进行相应的更改吗 您可以使用以下方法将 JSP 页面合并到另一个页面中 include像这样的指令 或通过使用
  • 按日期从 iPhone 删除本地通知

    iPhone 上的 LocalNotification 是否有可能在某个日期加载 我的问题是我为通知创建了一个事件 但在创建后释放了该对象 或者我可以创建一个具有相同数据的新对象来删除我的通知吗 对不起我的英语不好 预定的本地通知将为您提供
  • PHP 简单乘法的舍入误差[重复]

    这个问题在这里已经有答案了 PHP 在使用时似乎舍入不正确 int 来转换变量 为什么 multiplier 100000000 value 0 01020637 echo int value multiplier Output 10206