php科学计数法转string,php如何将科学计数法转数字
php將科學計數法轉數字的實現方法:首先通過if語句判斷指定的數值是否為科學計數法;然后提取科學計數法中有效的數據;接著正式處理該數據;最后調用“convert_scientific_number_to_normal”方法實現轉換即可。
PHP將科學計數法轉換為正常的數字
每天,都會遇到些稀奇古怪的BUG,然后有遇到一個數字變成科學計數法的問題。問題來源于當前輸出的一個數字太大了,然后存不下了。比如echo 14735037137891444444;
echo 0.00000000000000000000000000001;
然后輸出的結果為:1.4735037137891E+19
1.0E-29
這種情況也算常見了,只是數字太大或太小導致的,然后數據庫的存儲字段直接是字符串,結果就出現了種種神奇的問題。
然后就在網上找了個同樣神奇的函數,確實有效,但也滿坑的。然后就自己寫了個,邏輯有點復雜,但沒涉及到數字運算,精度應該是有保證的。<?php
/**
* 將科學計數法的數字轉換為正常的數字
* 為了將數字處理完美一些,使用部分正則是可以接受的
* @author loveyu
* @param string $number
* @return string
*/
function convert_scientific_number_to_normal($number)
{
if(stripos($number, 'e') === false) {
//判斷是否為科學計數法
return $number;
}
if(!preg_match(
"/^([\\d.]+)[eE]([\\d\\-\\+]+)$/",
str_replace(array(" ", ","), "", trim($number)), $matches)
) {
//提取科學計數法中有效的數據,無法處理則直接返回
return $number;
}
//對數字前后的0和點進行處理,防止數據干擾,實際上正確的科學計數法沒有這個問題
$data = preg_replace(array("/^[0]+/"), "", rtrim($matches[1], "0."));
$length = (int)$matches[2];
if($data[0] == ".") {
//由于最前面的0可能被替換掉了,這里是小數要將0補齊
$data = "0{$data}";
}
//這里有一種特殊可能,無需處理
if($length == 0) {
return $data;
}
//記住當前小數點的位置,用于判斷左右移動
$dot_position = strpos($data, ".");
if($dot_position === false) {
$dot_position = strlen($data);
}
//正式數據處理中,是不需要點號的,最后輸出時會添加上去
$data = str_replace(".", "", $data);
if($length > 0) {
//如果科學計數長度大于0
//獲取要添加0的個數,并在數據后面補充
$repeat_length = $length - (strlen($data) - $dot_position);
if($repeat_length > 0) {
$data .= str_repeat('0', $repeat_length);
}
//小數點向后移n位
$dot_position += $length;
$data = ltrim(substr($data, 0, $dot_position), "0").".".substr($data, $dot_position);
} elseif($length < 0) {
//當前是一個負數
//獲取要重復的0的個數
$repeat_length = abs($length) - $dot_position;
if($repeat_length > 0) {
//這里的值可能是小于0的數,由于小數點過長
$data = str_repeat('0', $repeat_length).$data;
}
$dot_position += $length;//此處length為負數,直接操作
if($dot_position < 1) {
//補充數據處理,如果當前位置小于0則表示無需處理,直接補小數點即可
$data = ".{$data}";
} else {
$data = substr($data, 0, $dot_position).".".substr($data, $dot_position);
}
}
if($data[0] == ".") {
//數據補0
$data = "0{$data}";
}
return trim($data, ".");
}
簡單的測試數據1.12E8 ------------- 112000000
1.12E3 ------------- 1120
1.12E2 ------------- 112
1.12E0 ------------- 1.12
1.12E-1 ------------ 0.112
1.12E-2 ------------ 0.0112
1.12E-8 ------------ 0.0000000112
0.112E1 ------------ 1.12
0.112E2 ------------ 11.2
0.112E4 ------------ 1120
0.112E-2 ----------- 0.00112
0000.112E-2 -------- 0.00112
0000.112000E-2 ----- 0.00112
.112E-2 ------------ 0.00112
.112E2 ------------- 11.2
總結
以上是生活随笔為你收集整理的php科学计数法转string,php如何将科学计数法转数字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学校计算机维护投标书,信息化系统硬件及应
- 下一篇: php函数scandir_PHP函数gl