3 回答

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊
您可以使用preg_match
將輸入拆分為數(shù)字和乘數(shù),并將數(shù)字乘以1000
乘數(shù)字符串的長度:
$inp= "12.345kk";
$number = 0;
if (preg_match('/^([\d.]+)([kt]+)/', $inp, $matches)) {
? ? $number = $matches[1];
? ? $multipliers = $matches[2];
? ? $number *= 1000 ** strlen($multipliers);
}
echo $number;
輸出:
12345000

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊
如果您確定數(shù)字的格式,您可以計(jì)算k字符串中的字符數(shù),然后將其轉(zhuǎn)換為數(shù)字并乘以適當(dāng)?shù)膬纭?/p>
$inp= "12.345kk";
$count = substr_count($inp,'k');
$number = (double)$inp*1000**$count;
print($number);

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
您的擔(dān)心是有道理的,eval()
除非您絕對(duì)必須這樣做,否則您永遠(yuǎn)不應(yīng)該通過 運(yùn)行用戶輸入。你不必在這里這樣做。讓我向您展示一種可能的解決方案。
您可以通過將輸入轉(zhuǎn)換為 來float
獲取輸入的數(shù)字部分。k
您可以使用獲取字符數(shù)substr_count()
。然后,您可以使用k
s 的數(shù)量作為該數(shù)字的指數(shù)1000
并將其與輸入數(shù)字相乘來計(jì)算結(jié)果數(shù)字:
$inp = "12.345kk";
$number = (float) $inp;? ? ? ? ? ? ? ? ? ? ? ? // 12.345
$factor = pow(1000, substr_count($inp, 'k'));? // 1000^2
$result = $number * $factor;? ? ? ? ? ? ? ? ? ?// 12345000
請(qǐng)注意,您也可以使用**
運(yùn)算符而不是pow
.?但是,我認(rèn)為pow
不熟悉 PHP 的程序員很容易理解它,因此更可取。
- 3 回答
- 0 關(guān)注
- 180 瀏覽
添加回答
舉報(bào)