php浮点数(float)运算中转整形(int)问题

$f = 0.58;
var_dump(intval($f * 100.0));

也许你认为他会输出58,但是实际上他输出的是57.
原因是作为浮点型数据,其精度已经损失了一部分,达不到完全精确。所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。

php中浮点数是弱类型,对于整数或者经过运算以后结果是整数的浮点数,php能当作整数对待,但类型还是浮点型不变。但如果经过运算以后不是整数,那php就把结果当作严格的浮点数对待了

在实际的开发中我们可以使用如下逻辑来解决这种境况
intval(round(floatval($value) * 100));

时间: 2024-11-06 19:49:06

php浮点数(float)运算中转整形(int)问题的相关文章

Java浮点数float和double精确计算的精度误差问题总结

1.float整数计算误差 案例:会员积分字段采用float类型,导致计算会员积分时,7位整数的数据计算结果出现误差. 原因:超出float精度范围,无法精确计算. float和double的精度是由尾数的位数来决定的.浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响. float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字: double:2^5

由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入

public class Arith { /** * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入. */ // 默认除法运算精度 private static final int DEF_DIV_SCALE = 10; // 这个类不能实例化 private Arith() { } /** * 提供精确的加法运算. * * @param v1 * 被加数 * @param v2 * 加数 * @return 两个参数的和 */ p

危险的浮点数float

今天写程序又以为我见鬼了!最后查出来发现原来又是浮点数搞的鬼! 情况大致是这样的,我想要测试向量运算的速度,所以要对一个浮点数向量进行求和运算,代码如下: int vect_size=100000000; vector<float> vect1(vect_size,0.1); float sum=0; for(int i=0;i<vect1.size();++i){ sum+=vect1[i]; } printf("%f\n",sum); 10^8个0.1求和,地球人

整数和浮点数及运算函数

整数有4种进制表示形式: 十进制 二进制,以0b或0B开头 八进制,以0o或0O开头 十六进制,以0x或0X开头 浮点数 浮点数之间运算存在不确定尾数,不是bug 0.1+0.2=0.30000000000000004 所以浮点数间运算与比较用round()函数来辅助 round(x, d):对x四舍五入,d是保留的小数位数 round(0.1+0.2, 1)==0.3返回True 不过要注意round的一些限制,具体可以参考这个链接: Python 中关于 round 函数的小坑 浮点数科学计

Java 浮点数 float或double类型的表示范围和精度

隐约记得,浮点数判断大小好像有陷阱,因为底层的二进制数不能精确表示所有的小数.有时候会产生让人觉得莫名其妙的事情. 如在java中, 0.99999999f==1f //true 0.9f==1f //false 要明白这些,首先要搞清楚float和double在内存结构 1.内存结构 float和double的范围是由指数的位数来决定的. float的指数位有8位,而double的指数位有11位,分布如下: float: 1bit(符号位) 8bits(指数位) 23bits(尾数位) dou

浮点数float累加误差分析与解决

1.  浮点数IEEE 754表示方法 要搞清楚float累加为什么会产生误差,必须先大致理解float在机器里怎么存储的,具体的表示参考[1] 和 [2], 这里只介绍一下组成 由上图可知(摘在[2]), 浮点数由: 符号位 + 指数位 + 尾数部分, 三部分组成.由于机器中都是由二进制存储的,那么一个10进制的小数如何表示成二进制.例如: 8.25转成二进制为1000.01, 这是因为 1000.01 = 1*2^3 + 0*2^2 + 0*2^1 + 0*2^0 + 0*2^-1 + 2*

JS/PHP 浮点数精确运算

php浮点数精确运算 bc是Binary Calculator的缩写.bc*函数的参数都是操作数加上一个可选的 [int scale],比如string bcadd(string $left_operand, string $right_operand[, int $scale]),如果scale没有提供,就用bcscale的缺省值.这里大数直接用一个由0-9组成的string表示,计算结果返回的也是一个 string. bcadd — 将两个高精度数字相加bccomp — 比较两个高精度数字,

JavaScript 浮点数及运算精度调整总结

JavaScript 浮点数及运算精度调整总结 JavaScript 只有一种数字类型 Number,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的.浮点数的精度问题不是JavaScript特有的,因为有些小数以二进制表示位数是无穷的. 作者:来源:theWalker|2015-12-02 10:21 移动端 收藏 分享 [技术沙龙]AI开发者实战营-7分钟打造1个定制技能.7月22号,我们等你一起! JavaScript 只有一种数字类型 Number,而且在Jav

Linux上整数和浮点数的运算

一:shell中对整数和浮点数的运算 常用的运算符号 加法+    减法 -     乘法*     除法/     求余% +=        -=        *=       /=        %= 1.整数的运算 (1).使用expr命令(注意:要求操作数和操作数之间用空格隔开,否则只会打印字符串) expr 1 + 1 expr 2 - 1 expr 2 \* 2 expr 2 / 1 expr 1 % 6 例如执行:#! /bin/bash num=$(expr 1 + 1) e