ဂဏန်းမဟုတ်သောကြိုးဖြင့်ဖြတ်သန်းသွားသောအခါ BCCOMP သည် string ကိုအရေအတွက်နှင့်နှိုင်းယှဉ်ခြင်းနှင့်နှိုင်းယှဉ်ခြင်းနှင့်ဆင်တူသည်။ အောက်ပါတို့ကိုများသောအားဖြင့် -
အဆိုပါ string ကိုနံပါတ်နှင့်အတူစတင်ခဲ့သည်, နောက်ဆက်တွဲ non-non-non-characters: အဖွင့်အပိုင်းကိုနှိုင်းယှဉ်ခြင်းအတွက်နံပါတ်အဖြစ်ခေါ်ဆောင်သွားသည်။
string သည်မည်သည့်နံပါတ်မပါ 0 င်ပါ။ 0 အဖြစ် 0 0 အဖြစ်လုပ်ဆောင်လိမ့်မည်။
ဥပမာတစ်ခုပေးပါ။
<?php
var_dump(bccomp('123abc', '123')); // ထုတ်လုပ်ခြင်း 0,တန်းတူညီမျှမှုဖော်ပြသည်,အကေြာင်းမှာ'123abc'ထည့်သွင်းစဉ်းစားခံရ123
var_dump(bccomp('abc', '0')); // ထုတ်လုပ်ခြင်း 0,'abc'ထည့်သွင်းစဉ်းစားခံရ0
var_dump(bccomp('abc', '1')); // ထုတ်လုပ်ခြင်း -1,0 < 1
?>
ဤအပြုအမူသည်ဂဏန်းမဟုတ်သောကြိုးများနှင့်ဆက်ဆံရာတွင်အထူးသဖြင့်ကြိုးများနှင့်မစသည့်အခါ,
အကယ်. သင်သည်စင်ကြယ်သောဂဏန်းကြိုးများကိုနှိုင်းယှဉ်ရန်လိုပါက BCcomp ကို သာအသုံးပြုပါ။ သို့သော် string သည်ဂဏန်းမဟုတ်သောအကြောင်းအရာများပါ 0 င်နိုင်ပါကအောက်ပါတို့ကို ဦး စွာပြုလုပ်ရန်အကြံပြုသည်။
PHP ကိုပုံမှန်သို့မဟုတ် built-in functions များဖြစ်သော is_numerrer ကို ဆုံးဖြတ်ရန် -
<?php
function safe_bccomp($a, $b, $scale = 0) {
if (!is_numeric($a) || !is_numeric($b)) {
throw new InvalidArgumentException("အဆိုပါ parameter သည်ဂဏန်းကြိုး string ကိုဖြစ်ရပါမည်");
}
return bccomp($a, $b, $scale);
}
try {
echo safe_bccomp('123abc', '123'); // ခြွင်းချက်ပစ်
} catch (InvalidArgumentException $e) {
echo $e->getMessage();
}
?>
ဤသည် 0 အဖြစ် Non- ဂဏန်းကြိုးကြိုးများ၏မမှန်ကန်သောနှိုင်းယှဉ်မှုကိုရှောင်ရှားသည်။
အကယ်. စီးပွားရေးယုတ္တိဗေဒကိုခွင့်ပြုပါကသင်ပုံမှန်အားဖြင့်ဂဏန်းအစိတ်အပိုင်းများကိုကြိုးနှင့်သာထုတ်ယူရန်ပုံမှန်ကိုသုံးနိုင်သည်။ ထို့နောက်နှိုင်းယှဉ်နိုင်သည်။
<?php
function extract_numeric($str) {
preg_match('/^[+-]?(\d+)(\.\d+)?/', $str, $matches);
return $matches[0] ?? '0';
}
$a = extract_numeric('123abc');
$b = extract_numeric('123');
echo bccomp($a, $b); // 0
?>
ဤနည်းလမ်းသည်ရှေ့ဆက်တွင်ကြိုးအစိတ်အပိုင်းများတွင်ဂဏန်းအစိတ်အပိုင်းများရှိသည့်ကိစ္စအတွက်သင့်တော်သည်။
BCCOMP သည်ဒီဂျစ်တယ်ကြိုးများအတွက်ဒီဇိုင်းပြုလုပ်ထားသည်။ Non-Non-Non-Non-strings များကိုမဖြတ်နိုင်သည့်အခါ၎င်းတို့ကိုအလိုအလျောက်ပြောင်းလဲသွားလိမ့်မည်။
BCOMPP ကို အသုံးမပြုမီ parameters တွေကိုတရားဝင်ဂဏန်းကြိုးကြိုးများဖြစ်ကြောင်းအတည်ပြုရန်အကြံပြုသည်။
နှိုင်းယှဉ်ရန်လိုအပ်သည့် string တစ်ခုတွင် Non-Non-Non-Nonic Content များပါ 0 င်ပါက,
ကျိုးကြောင်းဆီလျော်သော input ကိုအတည်ပြုခြင်းနှင့် preprocessing မှတဆင့်သာ BCcomp သည် နှိုင်းယှဉ်လျှင်မှန်ကန်စွာလုပ်ဆောင်နိုင်ပြီးမမျှော်လင့်သောယုတ္တိအမှားအယွင်းများကိုရှောင်ရှားရန်ကျွန်ုပ်တို့သေချာစေနိုင်သည်။
<?php
// နံပါတ်အစိတ်အပိုင်းများကို filter string အတွက်နှိုင်းယှဉ်ပါ
function safe_compare($a, $b, $scale = 0) {
preg_match('/^[+-]?(\d+)(\.\d+)?/', $a, $matchA);
preg_match('/^[+-]?(\d+)(\.\d+)?/', $b, $matchB);
$numA = $matchA[0] ?? '0';
$numB = $matchB[0] ?? '0';
return bccomp($numA, $numB, $scale);
}
// နမူနာ
echo safe_compare('123abc', '123'); // ထုတ်လုပ်ခြင်း0
echo safe_compare('abc', '0'); // ထုတ်လုပ်ခြင်း0
echo safe_compare('abc', '1'); // ထုတ်လုပ်ခြင်း-1
?>