bcdiv 使用带有科学记数法的非常小的浮点导致“除以零”错误

2024-03-09

使用 bcdiv,我无法使用科学记数法除以小浮点数:

工作代码:

bcscale(30);
$a = '1' ;
$b = '0.00000001';
$result = bcdiv($a, $b);
var_dump($result);

结果是 :

字符串(20)“100000000.0000000000”

非工作代码:

bcscale(30);
$a =  '1' ;
$b =  '1e-8';
$result = bcdiv($a, $b);
var_dump($result);

结果是 :

警告:bcdiv() [function.bcdiv]:除以零 C:\wamp\www\utilitaires\test_bcdiv.php 第 XX 行 NULL

我怎样才能正确地进行这个除法,同时减少精度损失?


那是因为,实际上,bcmath不支持科学计数法。手册中没有提及,但正如您所看到的,执行 http://lxr.php.net/xref/PHP_5_2/ext/bcmath/bcmath.c#351使用参数转换,它被命名为php_str2num http://lxr.php.net/xref/PHP_5_2/ext/bcmath/bcmath.c#php_str2num:

static void php_str2num(bc_num *num, char *str TSRMLS_DC)
{
    char *p;

    if (!(p = strchr(str, '.'))) {
        bc_str2num(num, str, 0 TSRMLS_CC);
        return;
    }

    bc_str2num(num, str, strlen(p+1) TSRMLS_CC);
}

and so bc_str2num http://lxr.php.net/xref/PHP_5_2/ext/bcmath/libbcmath/src/str2num.c#44:

bc_str2num (bc_num *num, char *str, int scale TSRMLS_DC)
{
  int digits, strscale;
  char *ptr, *nptr;
  char zero_int;

  /* Prepare num. */
  bc_free_num (num);

  /* Check for valid number and count digits. */
  ptr = str;
  digits = 0;
  strscale = 0;
  zero_int = FALSE;
  if ( (*ptr == '+') || (*ptr == '-'))  ptr++;  /* Sign */
  while (*ptr == '0') ptr++;            /* Skip leading zeros. */
  while (isdigit((int)*ptr)) ptr++, digits++;   /* digits */
  if (*ptr == '.') ptr++;           /* decimal point */
  while (isdigit((int)*ptr)) ptr++, strscale++; /* digits */
  if ((*ptr != '\0') || (digits+strscale == 0))
    {
      *num = bc_copy_num (BCG(_zero_));
      return;
    }

  /* Adjust numbers and allocate storage and initialize fields. */
  strscale = MIN(strscale, scale);
  if (digits == 0)
    {
      zero_int = TRUE;
      digits = 1;
    }
  *num = bc_new_num (digits, strscale);

  /* Build the whole number. */
  ptr = str;
  if (*ptr == '-')
    {
      (*num)->n_sign = MINUS;
      ptr++;
    }
  else
    {
      (*num)->n_sign = PLUS;
      if (*ptr == '+') ptr++;
    }
  while (*ptr == '0') ptr++;            /* Skip leading zeros. */
  nptr = (*num)->n_value;
  if (zero_int)
    {
      *nptr++ = 0;
      digits = 0;
    }
  for (;digits > 0; digits--)
    *nptr++ = CH_VAL(*ptr++);

  /* Build the fractional part. */
  if (strscale > 0)
    {
      ptr++;  /* skip the decimal point! */
      for (;strscale > 0; strscale--)
    *nptr++ = CH_VAL(*ptr++);
    }
}

-不难看出它在科学记数法上会失败(评论很好)。也许文档需要更新(隐含地提到这一点)。

可能的解决方案是在应用之前将字符串转换为普通视图bcmath功能

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

bcdiv 使用带有科学记数法的非常小的浮点导致“除以零”错误 的相关文章

  • 插入值数组

    我有一个具有可变数量值的数组 除了内部带有查询的循环之外 是否有更有效或更好的方法将它们插入到我的数据库中 At 这个网站 http www desilva biz mysql insert html 有一个很好的 MySQL 多插入查询示
  • 根据用户投票移动 div

    我是新来的 但我喜欢这个网站 我检查了其他类似的问题 但没有看到我要找的东西 我是一名音乐家 有一段时间我一直在做 每日之歌 每天写一首小歌 我想将歌曲发布为 div 在里面 li 在 div 中 我只想要一个简单的 mp3 播放器和一个
  • 如何隐藏实际的下载文件夹位置

    我想隐藏下载文件夹位置 以便用户下载文件时看不到该位置 我认为这可以使用 htaccess 文件来完成 但我该如何做到这一点 或者如何使用 PHP 来完成此操作 我在 PHP 中是这样做的
  • 在 Laravel 中创建用户表

    我在 laravel 的用户表方面遇到了一些麻烦 我很久以前就已经删除了那些默认表 现在我尝试使用 Auth 但无法注册 因为数据库中没有表 但我也无法创建表php artisan migrate 因为我已经删除了那些迁移表 所以我想再次创
  • Laravel 关注者/关注关系

    我正在尝试在 laravel 中制作一个简单的关注者 关注系统 没什么特别的 只需单击一个按钮即可关注或取消关注 并显示关注者或关注你的人 我的问题是我不知道如何建立模型之间的关系 这些是迁移 用户迁移 Schema create user
  • PHP/MySQL/jQuery 记录的悲观锁定

    我一直在考虑为我参与的应用程序开发一些简单的记录锁定 有一些用户实际上需要花费几个小时才能完成记录的编辑 当其他人想要更改记录时 这会导致问题 目前不涉及锁定 我不确定乐观锁定在我的情况下是否可靠 因为记录是通过 AJAX 请求保存的 我正
  • YOUTUBE API:检索视频关键字

    最近 YouTube 决定仅向经过身份验证的开发者输出视频关键字 我注册了开发者密钥 我试图获取一个我将解析的 XML 通过请求 https gdata youtube com feeds api videos COwIYbYQUrQ ke
  • Laravel 4 - 工匠错误 SQLSTATE[42000]

    我正在尝试为我的用户表创建一个新的迁移 我有以下架构 Schema create users function t t gt increments id t gt string username 16 t gt string passwor
  • 使用 php5-geoip 和 Maxmind 数据库获取 IPv6 支持

    我按照这些相同的步骤进行了 geoip 设置 http php net manual en geoip setup php http php net manual en geoip setup php wget http geolite m
  • gd 的 php 包装类

    谁能推荐一个 gd 库的包装类 我找到了一个few http www bin co com php scripts classes gd image 但它们只具有基本的图像处理功能 例如翻转 倒转等 我真的在这里画画 所以我想要所有的线 点
  • Selenium RC:如何检查元素是否具有给定属性?

    我有一些带有onclick属性和一些没有属性 我想检查指定的元素是否具有onclick属性 我怎样才能做到这一点 getAttribute 当有属性值时返回该属性值 如果没有 它会抛出 RuntimeException 并停止测试 即使我将
  • 将多个参数绑定到mysqli查询中

    现在我需要使用以下结构来处理将多个参数绑定到 mysqli 查询中 if words total 1 statement gt bind param s words 0 else if words total 2 statement gt
  • 将 CSV 文件导入 MySQL 数据库时出现无效的 UTF-8 字符串

    我正在尝试使用以下代码将 CSV 导入我的 MySQL 数据库 我从帖子中获取了 CSV 文件
  • 仅显示帖子的子类别

    我有一个自定义帖子 我想显示它所属的所有类别 这有两个部分 在页面顶部 我只显示它所属的顶级类别 这就是我的做法 div class type block span class type initial span div
  • 如果 WooCommerce 购物车商品缺货,请勿使用优惠券

    到目前为止 这就是我所得到的 add filter woocommerce coupon is valid coupon always valid 99 2 function coupon always valid valid coupon
  • 在 Laravel 中使用 PUT/DELETE 有什么价值?

    用于将路由定义为资源Route resource 文档表明 Verb Path Action Route Name GET resource index resource index GET resource create create r
  • 如何对 Slim 框架应用程序进行单元测试

    我一直在尝试对修改其他人代码的示例进行单元测试 每次我到达测试运行时都没有错误的程度 当我期望它们通过时 我只是遇到相同的失败 网上没有大量文档 我真的不知道还能去哪里 任何人都可以看到我的代码哪里出错了 bootstrap php php
  • 现实世界抽象类使用简单示例

    有没有使用抽象类的现实世界简单示例 我试图进入 PHP 的 OOP 但我仍然无法理解 为什么应该使用抽象类以及何时使用 是的 我知道不可能创建抽象类实例 只能创建继承它的类的实例 也许您有一个图像类 并且有 2 个驱动程序 GD 和 Ima
  • PHP 命名空间 - 提升一个级别?

    示例1 命名空间 Inori Test 主测试类 示例2 命名空间 Inori Test SubTest SubTest 类扩展了 问题 有没有办法快速提升命名空间的级别 以便 SubTest 可以扩展 MainTest 就像是 MainT
  • 创建横幅交换算法来轮播广告

    我正在构建广告横幅轮播脚本基于印象整个月均匀地显示广告 每次请求显示广告时都会进行计算 所以这将是即时完成的 广告应显示为一个接一个轮流播放 而不是仅显示一个广告 1000 次展示 然后显示另一个广告 1000 次展示 大多数情况下 它应该

随机推荐

  • AJAX更新DOM后如何重新初始化(召回)FancyBox?

    我正在使用 widgetkit 插件 Joomla CMS 用于灯箱 由于 widgetkit 使用 fancybox 来显示灯箱 我在这里发布一个问题 当我不使用 AJAX 技术来更新 Joomla 网站的内容时 FancyBox 效果很
  • scipy.optimize.curve_fit,TypeError:不支持的操作数类型

    我已经进行了搜索 问题似乎类似于Python scipy 或 pow 不支持的操作数类型 list 和 list https stackoverflow com questions 9156208 python scipy unsuppor
  • 在 pyspark 中缓存数据帧

    我想更准确地了解pyspark中数据帧的方法缓存的使用 当我跑步时df cache 它返回一个数据帧 因此 如果我这样做df2 df cache 哪个数据帧在缓存中 是吗df df2 或两者 我找到了源代码DataFrame cache h
  • 如何用py2exe打包psutil?

    该应用程序在我的开发win8环境中运行良好 但是当它与py2exe打包并在生产机器上运行时 它抛出异常 无法在动态链接库 ntdll dll 中定位过程入口点 RtlIdnToAscii 日志文件的详细内容是 Traceback most
  • 使用文本字段编辑货币

    如何获得 JavaFX TextField 来编辑存储的没有派系数字 例如长整型 的货币 使用数据绑定 TextFormatter 和其他 javaFX 东西 目标应该是 Bo 拥有 LongProperty 货币价值以分为单位 可编辑的文
  • 禁用(删除)WooCommerce 4.3.x 中的营销菜单选项

    自 WooCommerce 发布以来4 3 x 之前修复了删除适用于的 营销 菜单选项的问题4 1 x不再起作用了 我想知道是否有人知道如何删除它4 3 x 我已经尝试了所有这些但没有成功 1 add filter woocommerce
  • C++ 使用 || 检查字符是否不在字符串中不工作

    我正在开发这款游戏 要求玩家再次玩 我习惯于检查条件是否不满足然后返回 false 所以最后我可以简单地添加 return true 这也有助于嵌套 如果我以相反的方式这样做 它会起作用 bool AskToPlayAgain cout l
  • 在 writeln 函数中写入撇号 - Pascal

    如何使用 Pascal 打印撇号writeln功能 例子 writeln My brother s book 行不通 因为s book超出了 写入 功能 因此编译器返回错误 Fatal Syntax error expected but i
  • 有人可以用最通俗的语言向我解释一下如何使用 EventArgs 吗?

    我知道他们和代表有关系 我已经尝试过 但我仍然不明白如何使用它们 我对事件处理程序了解一些 但我真正想知道的是如何使用大多数方法中的普通旧事件参数 下面的例子 void Page Load object sender EventArgs e
  • 使用 PHP Unit 测试特殊字符

    我正在使用 PHPUnit 和类从 Symfony2 测试我的控制器WebTestCase return self client gt request POST withdraw array amount gt 130 array arra
  • 单元测试中的 Xcode 内存泄漏检测

    运行单元测试时是否可以测试是否发生内存泄漏 我想检查我的内存管理是否正确处理 Thanks 您可以尝试使用泄漏检测仪器在仪器下运行单元测试 但是 如果您使用 OCUnit 则这仅适用于应用程序 捆绑包 测试 如果您碰巧使用其他东西 请告诉我
  • 使用Rails 5,如何使FriendlyId附加一个-“count+1”来重复slugs而不是UUID?

    显然 FriendlyId 已经更改了之前将数字序列附加到重复 slugs 的默认方法 这就是我想要的 现在使用 UUID Previous versions of FriendlyId appended a numeric sequenc
  • SwiftUI 通用拉动刷新视图

    我有一个 CustomScrollView 它包装了我的 HomeView 如果你下拉它会获取新数据 它工作正常 但问题是我想在多个视图中重用它 并且我不想为每个视图创建它的副本 我尝试过这样做var rootView View但它抛出一个
  • wordpress: previous_post_link() / next_post_link() 占位符

    我遇到了问题previous post link and next post link 功能 当没有之前的帖子时 该函数previous post link 不显示链接 同样对于next post link 和最后一篇文章 我想要一个占位符
  • 如何使用javascript将图像转换为二进制格式[重复]

    这个问题在这里已经有答案了 通过图像 url 将图像转换为二进制 我的网址如下 D MyProject Image image jpg 我想转换这个 image jpg 使用 JavaScript 转换为二进制格式字符串 在线找到了一个二进
  • 字体大小 1px 与 rem 单位一起使用

    我正在追求一种可以随着缩放而很好地缩放的布局 用户按 ctr cmd plus 为此 我需要尺寸与字体大小一起缩放 使用 em 单位太棘手 所以我正在考虑使用 rem 并复制旧 ie 的每个维度属性 我最初的想法是将 html 元素上的 f
  • 代号一:将图像保存到存储并创建小圆形预览

    我目前的图像有问题 1 我无法将图像保存到存储 因为不支持将其直接存储到存储 我希望用户能够用相机拍照 然后创建的照片必须保存在某个地方 以便我稍后可以再次检索它 你能告诉我怎么做吗 a 保存图像 b 如何检索它 我在 Stackoverf
  • 尝试在 laravel 5.5 中获取非对象的属性

    我试图显示我的变量值以查看页面 但它显示尝试获取非对象属性的错误 请有人帮助我 这是我的控制器 public function myAffiliates Request request if user id Sentinel getUser
  • C中字符数组输入输出的问题

    我编写了以下代码来读取字符数组并打印它 include
  • bcdiv 使用带有科学记数法的非常小的浮点导致“除以零”错误

    使用 bcdiv 我无法使用科学记数法除以小浮点数 工作代码 bcscale 30 a 1 b 0 00000001 result bcdiv a b var dump result 结果是 字符串 20 100000000 0000000