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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php科学计数法转string,php如何将科学计数法转数字

發布時間:2023/12/10 php 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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如何将科学计数法转数字的全部內容,希望文章能夠幫你解決所遇到的問題。

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