国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP處理數(shù)學精度

chaos_G / 1697人閱讀

摘要:后來我看了下,確實有這么一個擴展庫,處理任意精度數(shù)字,對于任意精度的數(shù)學,提供了支持用字符串表示的任意大小和精度的數(shù)字的二進制計算。

用編程語言做計算,很多時候浮點數(shù)精度都是困擾過我的問題,即便是剛學PHP的新手也會在群里問為什么我的計算結(jié)果明顯不對,而我們總是老態(tài)龍鐘的丟出一句浮點數(shù)計算都存在精度問題,并沒有提出過什么實質(zhì)性的改善。比如下面的計算 0.57*100

zhgxun-pro:~ zhgxun$ php -a
Interactive shell

php > echo intval(0.57*100);
56
php > echo 0.57*100;
57
php > 

看到結(jié)果其實我們已經(jīng)想到了,很多時候我們忽略精度問題,一定意義上是因為我們沒有對計算結(jié)果進行類型轉(zhuǎn)換,巧妙的得到了更好的結(jié)果值。但是總會有(細心)的開發(fā)者會自作聰明的對結(jié)果進行指定,恰恰得到了相反的效果。這也是為什么我一直沒有仔細想過這個問題的原因,按動態(tài)解釋性語言的特性,變量都是在運行時才最終確定的,所以不要刻意去轉(zhuǎn)換類型,即便你很確認變量就應該是這個樣子的。

我記得在剛學PHP的時候,偶然間看到網(wǎng)絡上高洛峰的一個視頻,其間有一句話就說以后你們在PHP編程中,會遇到很多一時半會解釋不清楚的問題,那時候你們首先想到的應該是這門語言的特性--解釋性,自然你就會慢慢理解了。

后來我看了下,PHP確實有這么一個擴展庫,BCMath處理任意精度數(shù)字,對于任意精度的數(shù)學,PHP提供了支持用字符串表示的任意大小和精度的數(shù)字的二進制計算。自 PHP 4.0.4,libbcmath 隨同 PHP 一起發(fā)布,該擴展不需要任何外部的庫。官方文檔提供的函數(shù)有如下這些:

bcadd — 2個任意精度數(shù)字的加法計算

bccomp — 比較兩個任意精度的數(shù)字

bcdiv — 2個任意精度的數(shù)字除法計算

bcmod — 對一個任意精度數(shù)字取模

bcmul — 2個任意精度數(shù)字乘法計算

bcpow — 任意精度數(shù)字的乘方

bcpowmod — Raise an arbitrary precision number to another, reduced by a specified modulus

bcscale — 設置所有bc數(shù)學函數(shù)的默認小數(shù)點保留位數(shù)

bcsqrt — 任意精度數(shù)字的二次方根

bcsub — 2個任意精度數(shù)字的減法

如果不是設計太復雜的運算,只需要其中的加減乘除既可以做到高精度的數(shù)學處理。

class Test extends Command
{
    protected $signature = "test";
    protected $description = "測試樣例";
    
    public function handle()
    {
        // 使用BCMath進行高精度運算
        $a = 0.57;
        $b = 100;

        echo intval($a * $b) . PHP_EOL;
        echo $a * $b . PHP_EOL;
        echo bcmul($a, $b) . PHP_EOL;

        $c = 1;
        $d = 3;
        echo intval($c / $d) . PHP_EOL;
        echo $c / $d . PHP_EOL;
        echo bcdiv($c, $d, 6) . PHP_EOL;
    }
}

執(zhí)行結(jié)果:

zhgxun-pro:ankerbox_finance zhgxun$ php artisan test
56
57
57
0
0.33333333333333
0.333333
zhgxun-pro:ankerbox_finance zhgxun$ 

結(jié)果跟說明的一樣,你只要不要刻意去做數(shù)字精度的轉(zhuǎn)換計算,PHP其實表現(xiàn)的很良好的,并沒有大家說的那么可怕,覺得這門語言有太多的問題。只是可能當我們知道PHP有專門的函數(shù)來處理這個問題時,會不由自主的也覺得精度問題就應該這么做才對,如果對方碰巧不知道這其中的問題,就覺得對方很low一般,而表現(xiàn)的很不尊重別人。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/25810.html

相關(guān)文章

  • 系統(tǒng)的講解 - PHP 浮點數(shù)高精度運算

    摘要:浮點數(shù)類型包括單精度浮點數(shù)和雙精度浮點數(shù)。小結(jié)通過浮點數(shù)精度的問題,了解到浮點數(shù)的小數(shù)用二進制的表示。以后,在使用浮點數(shù)運算的時候,一定要慎之又慎,細節(jié)決定成敗。 概述 記錄下,工作中遇到的坑 ... 關(guān)于 PHP 浮點數(shù)運算,特別是金融行業(yè)、電子商務訂單管理、數(shù)據(jù)報表等相關(guān)業(yè)務,利用浮點數(shù)進行加減乘除時,稍不留神運算結(jié)果就會出現(xiàn)偏差,輕則損失幾十萬,重則會有信譽損失,甚至吃上官司,我...

    makeFoxPlay 評論0 收藏0
  • PHP變量類型

    摘要:獲取變量的類型,使用函數(shù)。要檢驗某個類型,可以使用函數(shù),如是在整形是在浮點型是在字符串如果需要將一個變量強制轉(zhuǎn)換為某類型,可以對其使用強制轉(zhuǎn)換或者函數(shù)。自起,此限制僅對包含變量時有效。 簡介 PHP支持9種原始數(shù)據(jù)類型。 4種標量類型: boolean布爾型 integer 整形 float 浮點型(也稱作double) string 字符串 3種復合類型: array...

    selfimpr 評論0 收藏0
  • 浮點數(shù)那些事兒

    摘要:說起浮點數(shù),大家都是又恨又愛的。當小數(shù)不為時,浮點數(shù)的值為,即不是一個數(shù)。所以,整個浮點數(shù)的二進制表示就是。最后其實,浮點數(shù)有很多坑。因此,我們在使用浮點數(shù)的時候,一定要小心。還有,涉及到金額計算的時候,一定不能使用浮點數(shù)。 本文為作者自己的總結(jié)的,由于作者的水平限制,難免會有錯誤,歡迎大家指正,感激不盡。 說起浮點數(shù),大家都是又恨又愛的。愛呢,是因為,只有它可以方便地使用小數(shù);恨呢,...

    Honwhy 評論0 收藏0
  • 浮點數(shù)那些事兒

    摘要:說起浮點數(shù),大家都是又恨又愛的。當小數(shù)不為時,浮點數(shù)的值為,即不是一個數(shù)。所以,整個浮點數(shù)的二進制表示就是。最后其實,浮點數(shù)有很多坑。因此,我們在使用浮點數(shù)的時候,一定要小心。還有,涉及到金額計算的時候,一定不能使用浮點數(shù)。 本文為作者自己的總結(jié)的,由于作者的水平限制,難免會有錯誤,歡迎大家指正,感激不盡。 說起浮點數(shù),大家都是又恨又愛的。愛呢,是因為,只有它可以方便地使用小數(shù);恨呢,...

    YFan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<