日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

php计算时 出现Warning: A non-numeric value encountered问题的原因及解决方法

發布時間:2023/12/13 综合教程 47 生活家
生活随笔 收集整理的這篇文章主要介紹了 php计算时 出现Warning: A non-numeric value encountered问题的原因及解决方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在使用(+ - * / ** % << >> | & ^) 運算時,例如a+b,如果a是開始一個數字值,但包含非數字字符(123a),b不是數字值開始時(b456),就會有A non-numeric value encountered警告。

對于這種問題,首先應該在代碼邏輯查看,為何會出現混合數值,檢查哪里出錯導致出現混合數值。

對于(+ - * / ** % << >> | & ^) 的運算,我們也可以加入轉換類型方法,把錯誤的數值轉換。

加入intval方法進行強制轉為數值型后,可以解決警告提示問題。

如果用php的+-/計算浮點數的時候,可能會遇到一些計算結果錯誤的問題,比如echo intval( 0.58100 );會打印57,而不是58,這個其實是計算機底層二進制無法精確表示浮點數的一個bug,是跨語言的,我用python也遇到這個問題。所以基本上大部分語言都提供了精準計算的類庫或函數庫,比如php有BC高精確度函數庫

<?php    $f = 0.58;    var_dump(intval($f * 100)); //為啥輸出57?>

永遠不要相信浮點數結果精確到了最后一位,也永遠不要比較兩個浮點數是否相等。如果確實需要更高的精度,應該使用任意精度數學函數或者 gmp 函數

<?php

$a = 0.1;
$b = 0.7;
var_dump(bcadd($a,$b,2) == 0.8);

bcadd — 將兩個高精度數字相加

bccomp — 比較兩個高精度數字,返回-1, 0, 1

  bcdiv — 將兩個高精度數字相除

  bcmod — 求高精度數字余數

  bcmul — 將兩個高精度數字相乘

  bcpow — 求高精度數字乘方

  bcpowmod — 求高精度數字乘方求模,數論里非常常用

  bcscale — 配置默認小數點位數,相當于就是Linux bc中的”scale=”

  bcsqrt — 求高精度數字平方根

  bcsub — 將兩個高精度數字相減

總結

以上是生活随笔為你收集整理的php计算时 出现Warning: A non-numeric value encountered问题的原因及解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。