【问题标题】:How to parse long value in php?如何解析php中的长值?
【发布时间】:2011-09-05 15:40:23
【问题描述】:

需要类似 intVal() 但对于更大的数字,例如:100001416147426。

php中有这样的函数吗?没找到。

【问题讨论】:

  • 您想达到什么结果?由于 int diapason,它不能是 int。你可能是真的 doubleval()
  • @RiaD:仅供参考,在英语中,“diapason”是一个音乐术语,与int 范围无关。
  • @Tomalak:谢谢,下次知道了

标签: php parsing long-integer


【解决方案1】:

你应该使用BC Math,它是为PHP设计的任意大小的数字。

BC Math extensions 提供several mathematic functions 喜欢:

  • bcadd 添加两个任意精度数
  • bccomp — 比较两个任意精度数
  • bcsqrt获取任意精度数的平方根
  • ...

在 PHP 文档站点上,Charles 有一个 small code example 用于对长数字进行四舍五入!

【讨论】:

    【解决方案2】:

    考虑

    $x = (double) "100001416147426";
    var_dump($x);
    

    输出:

    float(1.0000141614743E+14)
    

    【讨论】:

    • -1 请注意,在该示例中,值的精度是如何丢失的。
    • 精度不会丢失:P 先做一些数学运算。
    • 好的,实际上适合double 在某些系统上。使用printf shows this 进行演示,而var_dump 没有(您的示例演示了输出的舍入)。不过,这仍然是not an appropriate thing to rely on for "big" values
    • 那么“math around”是什么意思?
    • 试试这个:
    【解决方案3】:

    过去(从 C 开始)的编码标准一直是在数字后面加上 L/l $x = 100001416147426L;

    这个提示是解析器分配 64 位以便从要编译的脚本中读取数字。

    但除非你运行的是 php x64,否则这将毫无用处。否则,您将不得不使用 big_number 组件构建它。一旦在 x64 环境中,intval 会在超过 32 位 int 时自动扩展为 long。

    【讨论】:

    • 这会在 php 5.3 之前读/写某些数据库引擎时中断。 php 数据库驱动程序使用 32 位签名定义进行硬编码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 2011-06-04
    相关资源
    最近更新 更多