php round的问题(取精度结果不正确)

javagang 2013-09-05 03:20:27
发现使用PHP round函数进行小数控制的时候,有问题,如下所示:

round(9999999999999.99, 2) 期望值:9999999999999.99;实际值:10000000000000
round(1111111111111.11, 2) 期望值:1111111111111.11;实际值:1111111111111.1

请问有没有遇到类似问题的?这个是PHP已知缺陷吗?没有看到官方发布的相关说明。

注:我机器上PHP版本是5.3.6
...全文
753 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2013-09-05
  • 打赏
  • 举报
回复
浮点数只能保存有限数位的值 php 已经提供了高精度数学函数库 BC、GMP
javagang 2013-09-05
  • 打赏
  • 举报
回复
引用 5 楼 hengyu654 的回复:
[quote=引用 4 楼 javagang 的回复:] [quote=引用 3 楼 hengyu654 的回复:] [quote=引用 2 楼 javagang 的回复:] [quote=引用 1 楼 hengyu654 的回复:] round函数没有问题

$a = 1111111111111.11;
echo $a;
参考php关于浮点类型精度的介绍吧 http://www.php.net/manual/zh/language.types.float.php
$a = 1111111111111.11; echo $a; 这段代码说明了什么?并没有调用round?[/quote] 输出结果是1111111111111.1,说明脚本编译期间就将1111111111111.11转换成1111111111111.1了。 可能是php的浮点类型由于精度的原因不能存储1111111111111.11。 你没有看php官方的说明吗?"所以永远不要相信浮点数结果精确到了最后一位" [/quote] 那想要完整显示我例举的数字应该如何处理?[/quote] 你还是没有看官方的说明,里面说的很清楚了,自己找答案去吧[/quote] OK,thanks
hengyu654 2013-09-05
  • 打赏
  • 举报
回复
引用 4 楼 javagang 的回复:
[quote=引用 3 楼 hengyu654 的回复:] [quote=引用 2 楼 javagang 的回复:] [quote=引用 1 楼 hengyu654 的回复:] round函数没有问题

$a = 1111111111111.11;
echo $a;
参考php关于浮点类型精度的介绍吧 http://www.php.net/manual/zh/language.types.float.php
$a = 1111111111111.11; echo $a; 这段代码说明了什么?并没有调用round?[/quote] 输出结果是1111111111111.1,说明脚本编译期间就将1111111111111.11转换成1111111111111.1了。 可能是php的浮点类型由于精度的原因不能存储1111111111111.11。 你没有看php官方的说明吗?"所以永远不要相信浮点数结果精确到了最后一位" [/quote] 那想要完整显示我例举的数字应该如何处理?[/quote] 你还是没有看官方的说明,里面说的很清楚了,自己找答案去吧
javagang 2013-09-05
  • 打赏
  • 举报
回复
引用 3 楼 hengyu654 的回复:
[quote=引用 2 楼 javagang 的回复:] [quote=引用 1 楼 hengyu654 的回复:] round函数没有问题

$a = 1111111111111.11;
echo $a;
参考php关于浮点类型精度的介绍吧 http://www.php.net/manual/zh/language.types.float.php
$a = 1111111111111.11; echo $a; 这段代码说明了什么?并没有调用round?[/quote] 输出结果是1111111111111.1,说明脚本编译期间就将1111111111111.11转换成1111111111111.1了。 可能是php的浮点类型由于精度的原因不能存储1111111111111.11。 你没有看php官方的说明吗?"所以永远不要相信浮点数结果精确到了最后一位" [/quote] 那想要完整显示我例举的数字应该如何处理?
hengyu654 2013-09-05
  • 打赏
  • 举报
回复
引用 2 楼 javagang 的回复:
[quote=引用 1 楼 hengyu654 的回复:] round函数没有问题

$a = 1111111111111.11;
echo $a;
参考php关于浮点类型精度的介绍吧 http://www.php.net/manual/zh/language.types.float.php
$a = 1111111111111.11; echo $a; 这段代码说明了什么?并没有调用round?[/quote] 输出结果是1111111111111.1,说明脚本编译期间就将1111111111111.11转换成1111111111111.1了。 可能是php的浮点类型由于精度的原因不能存储1111111111111.11。 你没有看php官方的说明吗?"所以永远不要相信浮点数结果精确到了最后一位"
javagang 2013-09-05
  • 打赏
  • 举报
回复
引用 1 楼 hengyu654 的回复:
round函数没有问题

$a = 1111111111111.11;
echo $a;
参考php关于浮点类型精度的介绍吧 http://www.php.net/manual/zh/language.types.float.php
$a = 1111111111111.11; echo $a; 这段代码说明了什么?并没有调用round?
hengyu654 2013-09-05
  • 打赏
  • 举报
回复
round函数没有问题

$a = 1111111111111.11;
echo $a;
参考php关于浮点类型精度的介绍吧 http://www.php.net/manual/zh/language.types.float.php

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧