A. php与mysql的float类型的精度是分别怎么样的
对于单精度浮点数Float: 当数据范围在±131072(65536×2)以内的时候,float数据精度是正确的,但是超出这个范围的数据就不稳定,没有发现有相关的参数设置建议:将float改成double或者decimal,两者的差别是double是浮点计算,decimal是定点计算,会得到更精确的数据。
1.float类型
float列类型默认长度查不到结果,必须指定精度,
比如 num float, insert into table (num) values (0.12); select * from table where num=0.12的话,empty set。
B. php 字符串0.01124怎么转换成浮点型不失精度
使用(float)强转即可:
<?php
$str='0.01124';
$num=(float)$str;
var_mp($num);
/*
float(0.01124)
*/
C. 请教,php保留两位小数,但不四舍五入
$n=123.456789;
echofloor($n*100)/100;
D. 用PHP的循环进行数字计算时候遇到的问题
变量的类型不一样吧
10是一个整型数
而0.01是浮点型的
两个不同类型的变量相加会丢失精度
因为简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999...。
这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3 变成了 0.3333333. . .。
所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数库或者 gmp 函数库。
E. PHP 里面 (string)$num 和 strval($num)的 区别
表面看着没有区别
但是在精度计算上就体现出来了
比如 $num = 5.2*100;
如果单纯存储数据没有区别 如果你进行数据库运算查询的时候两个就完全有区别了
比如你数据库字段上有一个字段类型为int num 值为 520
这时你会发现用(string)$num查询是查询不到信息 但是用 strval($num)这时绝对可以查询出来
F. php如何处理高精度计算函数
网络查一下“BC 高精确度函数库”
注意:要使用 BC 这个函数库,要在编译 PHP 程序时加入 --enable-bcmath 的选项。
G. php里面bcadd是什么意思
PHP 为任意精度数学计算提供了二进制计算器(Binary Calculator),它支持任意大小和精度的数字,以字符串形式描述
bcadd — 加法
bccomp — 比较
bcdiv — 相除
bcmod — 求余数
bcmul — 乘法
bcpow — 次方
bcpowmod — 先次方然后求余数
bcscale — 给所有函数设置小数位精度
bcsqrt — 求平方根
bcsub — 减法
H. php中3个小数的计算,如134.7-52.5 - 82.2,为什么结果不是0而是一个奇怪的科学计数法
楼上的回答很详细了,而且,这不仅仅是php的问题,你在js里console.log(134.7-52.5 - 82.2)
也得不到0的,
I. php两个浮点数相乘该怎么计算
浮点数相乘:先计算再求精度。
如(取五位精度);
<?php
$a=12.3345667;
$b = 0.987654321;
$c=$a*$b;
$d=number_format($c,5,'.',',');
echo $d;
// $d=12.18229
J. php中如何计算圆的面积且保留两位小数
PHP 中的 round() 函数可以实现
round() 函数对浮点数进行四舍五入。
round(x,prec)
参数说明
x 可选。规定要舍入的数字。
prec 可选。规定小数点后的位数。
返回将 x 根据指定精度 prec (十进制小数点后数字的数目)进行四舍五入的结果。prec 也可以是负数或零(默认值)。
注释:PHP 默认不能正确处理类似 "12,300.2" 的字符串。
例如:
输出: -4.64