PHP တွင် floating Point စစ်ဆင်ရေးများသည်တိကျမှန်ကန်မှုကိုမကြာခဏတွေ့ကြုံခံစားလေ့ရှိသည်။ ဤပြ problem နာသည်များသောအားဖြင့်ရေပေါ်အမှတ်အသားများ၏နုတ်ခြင်း, မြှောက်ခြင်းနှင့်ကွဲပြားခြင်းနှင့်ခွဲခြားခြင်းလုပ်ငန်းများ, ဤအမှားသည်ကွန်ပျူတာအတွင်းရှိ floating point များ၏ကိုယ်စားပြုမှုကိုကန့်သတ်ခြင်းကြောင့်ဖြစ်သည်။ ဒီအမှားကိုဘယ်လိုစီရင်ရမယ်ဆိုတာသိဖို့လိုတယ်။
Flowating Point နံပါတ်၏တွက်ချက်မှုအမှားတစ်ခုမှာကွန်ပျူတာသည် floating point နံပါတ်ကိုသိုလှောင်သည့်အခါကွန်ပျူတာသည်တိကျစွာတိကျစွာမဖော်ပြနိုင်သောကြောင့်ဖြစ်သည်။ PHP တွင် floating points များသည်အမြဲတမ်းလုံးဝတိကျမှန်ကန်မှုမရှိပါ။ ဥပမာအားဖြင့် 0.1 + 0.2 ကိုတွက်ချက်သောအခါရလဒ်မှာ 0.3 အတိအကျမဟုတ်ဘဲ 0.3 နှင့်အလွန်နီးကပ်သောတန်ဖိုးတစ်ခုဖြစ်သည်။ များသောအားဖြင့်ဤအမှားသည်သာမန် application များအတွက်အနည်းဆုံးဖြစ်သော်လည်းဤပြ problem နာသည်အထူးတိကျသောတွက်ချက်မှုများလိုအပ်သည့်အခြေအနေတွင်အထူးထင်ရှားသည်။
PHP တွင် IS_DOUBLE သည် variable တစ်ခုသည် floating point နံပါတ် (နှစ်ဆအမျိုးအစား) ရှိမရှိဆုံးဖြတ်ရန်အသုံးပြုသော function တစ်ခုဖြစ်သည်။ ဤလုပ်ဆောင်မှုမှတစ်ဆင့် floating point နံပါတ်ကိုတိကျစွာလည်ပတ်နိုင်ပြီးအချက်အလက်အမျိုးအစားများတွင်မတိုက်ဆိုင်မှုကြောင့်ဖြစ်ပေါ်လာသောအမှားများကိုကျွန်ုပ်တို့ရှောင်ရှားနိုင်သည်။
<?php
$var1 = 0.1 + 0.2;
$var2 = 0.3;
if (is_double($var1) && is_double($var2)) {
echo "Both variables are floating point numbers.\n";
if ($var1 == $var2) {
echo "The two numbers are equal.\n";
} else {
echo "The two numbers are NOT equal.\n";
}
}
?>
ဤကုဒ်တွင် $ var1 နှင့် $ var2 floating မှတ်ဖြစ်ကြောင်းဆုံးဖြတ်ရန် is_double ကို အသုံးပြုသည်။ ထို့နောက်ကျွန်ုပ်တို့သည်တန်ဖိုးနှစ်ခုနှင့် output နှစ်ခုကိုတန်းတူဖြစ်စေ, မနှိုင်းယှဉ်ပါ။ ရေပေါ်အချက်များ၏သိုလှောင်မှုတိကျမှုကြောင့်၎င်းတို့သည်များသောအားဖြင့်တန်းတူမဟုတ်ပါ။
ရေပေါ်အချက်များကြောင့်ဖြစ်ပေါ်လာသောအမှားများကိုရှောင်ရှားရန်သူတို့နှင့်အတူကိုင်တွယ်ရန်အောက်ပါနည်းလမ်းများကိုအသုံးပြုလေ့ရှိသည် -
rounding ကိုအသုံးပြုပါ - တွက်ချက်မှုရလဒ်ကိုသတ်မှတ်ထားသောဒ decimal မသောနေရာများသို့လှည့်ပတ်ထားသည့်ဒ decimal မသောနေရာများသို့လျှော့ချခြင်း,
<?php
$result = 0.1 + 0.2;
echo round($result, 2); // ထုတ်လုပ်ခြင်း 0.3
?>
BCMAtath extension ကိုအသုံးပြုခြင်း - PHP သည် BCMATT တိုးချဲ့မှုကိုမြင့်မားသောတိကျသောရေပေါ်အမှတ်တွက်ချက်မှုများကိုကိုင်တွယ်ရန်,
<?php
echo bcadd('0.1', '0.2', 2); // ထုတ်လုပ်ခြင်း 0.30
?>
ရေပေါ်အချက်များကိုနှိုင်းယှဉ်သောအခါသည်းခံစိတ်ကိုအသုံးပြုသည် ။ ရေပေါ်အချက်နှစ်ချက်ကိုနှိုင်းယှဉ်သောအခါသူတို့၏ခြားနားချက်သည်သည်းခံစိတ်တန်ဖိုးထက်နည်းပါက၎င်းတို့သည်တန်းတူဖြစ်သည်ဟုယူမှတ်ကြသည်။
<?php
$epsilon = 0.00001;
if (abs($var1 - $var2) < $epsilon) {
echo "The two numbers are considered equal within the tolerance.\n";
} else {
echo "The two numbers are NOT equal.\n";
}
?>
PHP တွင် floating points ၏တွက်ချက်မှုအမှားများသည်ကွန်ပျူတာကိုယ်စားပြုမှုကန့်သတ်ချက်များကြောင့်ဖြစ်သည်။ is_double သုံးပြီး variouse အမျိုးအစားကိုစစ်ဆေးခြင်းအားဖြင့်ကျွန်ုပ်တို့သည် floating point ကိုစနစ်တကျကိုင်တွယ်ရန်သေချာစေနိုင်သည်။ တစ်ချိန်တည်းမှာပင် rounding, မြင့်မားသောတိကျသောတွက်ချက်မှုလုပ်ငန်းဆောင်တာများသို့မဟုတ်နှိုင်းယှဉ်ခြင်းသည်းခံခြင်းသည် floating point တိကျမှုပြ problems နာများကြောင့်ဖြစ်ပေါ်လာသောတွက်ချက်မှုအမှားများကိုထိရောက်စွာရှောင်ရှားနိုင်သည်။
ဤတိကျမှုပြ problem နာသည်သေးငယ်သော်လည်းအချို့သောစီးပွားရေးအခြေအနေများ (ဘဏ် financial ာရေးကွန်ပြူတာကွန်ပျူတာတွက်ချက်ခြင်းစသဖြင့်) အချို့သောစီးပွားရေးအခြေအနေများတွင်ဆိုးကျိုးများဖြစ်ပေါ်စေနိုင်သည်။ ထို့ကြောင့်ကျွန်ုပ်တို့သည်ရေပေါ်အမှတ်တွက်ချက်မှုများကိုလုပ်ဆောင်သောအခါရလဒ်များ၏တိကျမှန်ကန်မှုကိုသေချာစေရန်သတိထားရမည်။