JavaScript-不使用BCMath怎样提高php浮点数的运算精度?
php在进行浮点数运算时会有运算精度问题,比如2.28*50,按数学运算结果是114,但使用php时,
var_dump(intval(2.28*50));//113
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
php在进行浮点数运算时会有运算精度问题,比如2.28*50,按数学运算结果是114,但使用php时,
var_dump(intval(2.28*50));//113
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
别用intval,用round就可以的,这样可以保留它的浮点数类型
echo round(2.28*50);
round是进行四舍五入的,如果避免四舍五入带来的损失的话,可以先根据小数点位数对浮点数进行整型转化:
echo intval(round(2.28*100)*50/100);
浮点运算精度必然不准
如果是计算相乘结果,可看如下js代码,php系统函数与js不同也可以做相对应的改变:
function multiplication(a ,b){
var A = a.toString() //分别转换成字符,下同
var B = b.toString()
var A_do_position = A.indexOf(".") //a小数点位置,下同
var B_do_position = B.indexOf(".")
var float_A_len = (A_do_position !== -1) ? (A.length - 1 - A_do_position) : 0 //a小数位数,下同
var float_B_len = (B_do_position !== -1) ? (B.length - 1 - B_do_position) : 0
var mult = A.replace(".", "") * B.replace(".", "") //化成整数相乘得出结果
var MULT = mult.toString()
var int_len = MULT.length - (float_A_len + float_B_len) //化成整数相乘
var int_str = MULT.substring(0, int_len) //得出结果整数
var dec_str = MULT.substring(int_len)//得出结果小数
return Number(int_str + "." + dec_str)//返回结果
}
multiplication(2.28, 50) // 114
如果需要做加减和除,也可以采用化为整数这个思路。希望能帮上忙
round( $a )
进行四舍五入,不知道满不满足你的需求