亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

實施數千(1k = 1000,1kk = 1000000)解釋器

實施數千(1k = 1000,1kk = 1000000)解釋器

PHP
素胚勾勒不出你 2023-03-26 16:01:21
問題我正在嘗試創建一個將數字作為輸入的工具,例如 - 1kk,并用k乘以 1000 替換每個數字,即在這里我們得到1000000。處理整數時沒有問題,但我正在努力實現將數字替換為浮點數的算法,例如12.345kkwith 12345000??赡艿慕鉀Q方案k好的,我可以用乘以 1000 的方法替換每個表達式,然后eval是整個表達式:$inp= "12.345kk";$number = preg_replace('/[kt]/','*1000',$inp);eval("\$result = {$number};");echo($result); // 12345000但這真的很危險,因為該工具需要用戶輸入,并且用戶可以編寫他們想要的任何內容。你能為這個問題提供一個安全的解決方案嗎?這是一個 PHP 問題,但我想解決方案在其他語言中應該或多或少相似,算法本身應該不是很困難。
查看完整描述

3 回答

?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

您可以使用preg_match將輸入拆分為數字和乘數,并將數字乘以1000乘數字符串的長度:

$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


查看完整回答
反對 回復 2023-03-26
?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

如果您確定數字的格式,您可以計算k字符串中的字符數,然后將其轉換為數字并乘以適當的冪。


$inp= "12.345kk";


$count = substr_count($inp,'k');


$number = (double)$inp*1000**$count;


print($number);


查看完整回答
反對 回復 2023-03-26
?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

您的擔心是有道理的,eval()除非您絕對必須這樣做,否則您永遠不應該通過 運行用戶輸入。你不必在這里這樣做。讓我向您展示一種可能的解決方案。

您可以通過將輸入轉換為 來float獲取輸入的數字部分。k您可以使用獲取字符數substr_count()。然后,您可以使用ks 的數量作為該數字的指數1000并將其與輸入數字相乘來計算結果數字:

$inp = "12.345kk";


$number = (float) $inp;? ? ? ? ? ? ? ? ? ? ? ? // 12.345

$factor = pow(1000, substr_count($inp, 'k'));? // 1000^2


$result = $number * $factor;? ? ? ? ? ? ? ? ? ?// 12345000

請注意,您也可以使用**運算符而不是pow.?但是,我認為pow不熟悉 PHP 的程序員很容易理解它,因此更可取。



查看完整回答
反對 回復 2023-03-26
  • 3 回答
  • 0 關注
  • 202 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號