首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么bcmath函数不会失去精确度?

问为什么bcmath函数不会失去精确度?
EN

Stack Overflow用户
提问于 2016-03-11 19:11:50
回答 1查看 302关注 0票数 0

我们都知道处理浮点数可能会遇到这样的麻烦:

代码语言:javascript
复制
echo intval(0.58*100);//57

使用bcmath函数会有所帮助:

代码语言:javascript
复制
echo bcmul('0.58', '100', 2);//58.00

php手册:

代码语言:javascript
复制
//Multiply the left_operand by the right_operand.
string bcmul(string $left_operand , string $right_operand [, int $scale = 0 ])

但是为什么这会起作用呢?

我注意到前两个参数应该是字符串,我想知道这是不是因为这些函数以字符串的方式处理数字?

EN

回答 1

Stack Overflow用户

发布于 2016-03-11 19:26:01

与bcmath一起使用的数字应该用字符串表示,因为如果你使用原生的php数字格式,比如整数或浮点数,那么你根本不能表达所有的值。

最简单的例子是整型。整数限制为常量PHP_INT_MAX定义的最大值。如果你想写下任何大于这个数字的数字,php将不能代表那个确切的数字。这是因为php使用预定义的内存量来存储整数。

请参阅此示例:

代码语言:javascript
复制
echo PHP_INT_MAX;
echo "\n";
echo PHP_INT_MAX + 1;

输出为:

代码语言:javascript
复制
9223372036854775807
9.2233720368548E+18

正如您所看到的,第二个值是,而不是 9223372036854775808,这可能是正确的,而是一些其他(类似)值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35938737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档