php 如何輸出超大的數字?

來源:互聯網
上載者:User
如有這麼一個數字,這樣定義我不知道可不可以,但如果是函數返回,肯定會有這大的數字

$num=101000000411132513120104;

直接echo

echo $num;//或者echo (string)$sum;

都得到

1.0100000041113E+23

如果執行

$num='A'.$num;

輸出

A1.0100000041113E+23

如何才能記它在瀏覽器中原樣輸出呢?

(ps:當然實現情況很少有這麼大的數字,我只想知道用PHP有沒有辦法解決這個)

回複內容:

如有這麼一個數字,這樣定義我不知道可不可以,但如果是函數返回,肯定會有這大的數字

$num=101000000411132513120104;

直接echo

echo $num;//或者echo (string)$sum;

都得到

1.0100000041113E+23

如果執行

$num='A'.$num;

輸出

A1.0100000041113E+23

如何才能記它在瀏覽器中原樣輸出呢?

(ps:當然實現情況很少有這麼大的數字,我只想知道用PHP有沒有辦法解決這個)

如果一個整數在php定義或者計算賦值後超出了當前環境int型的最大值,php的做法是將這個整數轉換為float型,因為這樣可以以科學計數法進行儲存。而這一過程,會帶來精度的損失,也就是說,你的$num在賦值後已經不完全是原來的數字了,所以也沒法原樣進行輸出。

如果要原樣進行輸出,要在賦值之前就把值轉換成string型,並以此來儲存,這樣才能保證原樣輸出。當然,這樣做之後也沒法再進行運算了,因為一旦運算,又會迴歸到浮點數儲存。

那直接儲存為字串得了。需要計算的時候再轉換。

可以參考這一篇文章,直接進行類比的計算:

http://www.51-n.com/t-3945-1-1.html

PHP計算大數值運算時會出錯,當數字太大時,數值會變成科學計數.那怎麼來進行PHP超大數值運算,包括加減乘除,冪運算,平方根,模數運算呢?
要解決科學計數的問題,只要賦值時加一對引號即可.


$n = '22222222222222222222222222220';
echo $n;
?>
如果不加引號,顯示2.2222222222222E+28,加引號後顯示22222222222222222222222222220

超大數值運算,包括加減乘除,冪運算,平方根,模數運算.

使用PHP的bcmath函數建立一個自訂函數,代碼如下,
function calc($m,$n,$x){

    $errors=array(            '被除數不能為零',            '負數沒有平方根'    );    switch($x){            case 'add':                    $t=bcadd($m,$n);                    break;            case 'sub':                    $t=bcsub($m,$n);                    break;            case 'mul':                    $t=bcmul($m,$n);                    break;            case 'div':                    if($n!=0){                            $t=bcdiv($m,$n);                    }else{                            return $errors[0];                    }                    break;            case 'pow':                    $t=bcpow($m,$n);                    break;            case 'mod':                    if($n!=0){                            $t=bcmod($m,$n);                    }else{                            return $errors[0];                    }                    break;            case 'sqrt':                    if($m>=0){                            $t=bcsqrt($m);                    }else{                            return $errors[1];                    }                    break;    }    $t=preg_replace("/\..*0+$/",'',$t);    return $t;

}
/用法舉例/
echo calc('11111111111111111111111111111111110','10','add');
?>

使用方法:
calc(參數1參數2,參數3);
參數3指定運算方法:add加,sub減,mul乖,div除,pow冪,mod模數,sqrt求算術平方根
加減乖除:參數1 加上/減去/乘以/除以 參數2
冪:參數1 的 參數2 次方.
模:參數1 除以 參數2 得到的餘數.
算術平方根:求 參數1 的算術平方根.參數2不起作用,但不能省略.

PHP大體上說沒有解決辦法,你這種天文數字,可能在專業科學中是有用的,但PHP不是面向專業科學的,既然誰都知道PHP的數字精度有限制,就只能按照這個限制來考慮問題。對於民用來講,13位的精度無論如何也夠用了。

非要PHP支援只能是自己改寫核心。(而且還不知道64位作業系統是不是支援。)

$num=101000000411132513120104;賦值後已經$num已經不等於原來的值了,故無法儲存原來的值並進行計算,除非在賦值前轉化為字元換

據我瞭解,沒有,畢竟資料是給人看的,使用者也不想看到那麼多0,所以用數學符號就可以了

直接存成字串吧,如果要計算再轉類型

$num='101000000411132513120104';

可以分兩段儲存

用字串。
計算的時候,自己寫演算法。
十以內的總是精確的。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.