လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP တွက်ချက်မှုအမှားများကိုရှောင်ရှားရန် is_double ကိုသုံးပါ။ တိကျမှန်ကန်မှုပြ problem နာကိုဘယ်လိုဖြေရှင်းရမလဲ။

PHP တွက်ချက်မှုအမှားများကိုရှောင်ရှားရန် is_double ကိုသုံးပါ။ တိကျမှန်ကန်မှုပြ problem နာကိုဘယ်လိုဖြေရှင်းရမလဲ။

M66 2025-06-22

PHP တွင် floating Point စစ်ဆင်ရေးများသည်တိကျမှန်ကန်မှုကိုမကြာခဏတွေ့ကြုံခံစားလေ့ရှိသည်။ ဤပြ problem နာသည်များသောအားဖြင့်ရေပေါ်အမှတ်အသားများ၏နုတ်ခြင်း, မြှောက်ခြင်းနှင့်ကွဲပြားခြင်းနှင့်ခွဲခြားခြင်းလုပ်ငန်းများ, ဤအမှားသည်ကွန်ပျူတာအတွင်းရှိ floating point များ၏ကိုယ်စားပြုမှုကိုကန့်သတ်ခြင်းကြောင့်ဖြစ်သည်။ ဒီအမှားကိုဘယ်လိုစီရင်ရမယ်ဆိုတာသိဖို့လိုတယ်။

floating အမှတ်တွက်ချက်မှုအမှားကဘာလဲ?

Flowating Point နံပါတ်၏တွက်ချက်မှုအမှားတစ်ခုမှာကွန်ပျူတာသည် floating point နံပါတ်ကိုသိုလှောင်သည့်အခါကွန်ပျူတာသည်တိကျစွာတိကျစွာမဖော်ပြနိုင်သောကြောင့်ဖြစ်သည်။ PHP တွင် floating points များသည်အမြဲတမ်းလုံးဝတိကျမှန်ကန်မှုမရှိပါ။ ဥပမာအားဖြင့် 0.1 + 0.2 ကိုတွက်ချက်သောအခါရလဒ်မှာ 0.3 အတိအကျမဟုတ်ဘဲ 0.3 နှင့်အလွန်နီးကပ်သောတန်ဖိုးတစ်ခုဖြစ်သည်။ များသောအားဖြင့်ဤအမှားသည်သာမန် application များအတွက်အနည်းဆုံးဖြစ်သော်လည်းဤပြ problem နာသည်အထူးတိကျသောတွက်ချက်မှုများလိုအပ်သည့်အခြေအနေတွင်အထူးထင်ရှားသည်။

အမျိုးအစားကိုဆုံးဖြတ်ရန် is_double ကို သုံးပါ

PHP တွင် IS_DOUBLE သည် variable တစ်ခုသည် floating point နံပါတ် (နှစ်ဆအမျိုးအစား) ရှိမရှိဆုံးဖြတ်ရန်အသုံးပြုသော function တစ်ခုဖြစ်သည်။ ဤလုပ်ဆောင်မှုမှတစ်ဆင့် floating point နံပါတ်ကိုတိကျစွာလည်ပတ်နိုင်ပြီးအချက်အလက်အမျိုးအစားများတွင်မတိုက်ဆိုင်မှုကြောင့်ဖြစ်ပေါ်လာသောအမှားများကိုကျွန်ုပ်တို့ရှောင်ရှားနိုင်သည်။

Code Page

 <?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 နှစ်ခုကိုတန်းတူဖြစ်စေ, မနှိုင်းယှဉ်ပါ။ ရေပေါ်အချက်များ၏သိုလှောင်မှုတိကျမှုကြောင့်၎င်းတို့သည်များသောအားဖြင့်တန်းတူမဟုတ်ပါ။

floating point တိကျမှန်ကန်မှုပြ issue နာကိုဘယ်လိုကိုင်တွယ်မလဲ။

ရေပေါ်အချက်များကြောင့်ဖြစ်ပေါ်လာသောအမှားများကိုရှောင်ရှားရန်သူတို့နှင့်အတူကိုင်တွယ်ရန်အောက်ပါနည်းလမ်းများကိုအသုံးပြုလေ့ရှိသည် -

  1. rounding ကိုအသုံးပြုပါ - တွက်ချက်မှုရလဒ်ကိုသတ်မှတ်ထားသောဒ decimal မသောနေရာများသို့လှည့်ပတ်ထားသည့်ဒ decimal မသောနေရာများသို့လျှော့ချခြင်း,

     <?php
    $result = 0.1 + 0.2;
    echo round($result, 2);  // ထုတ်လုပ်ခြင်း 0.3
    ?>
    
  2. BCMAtath extension ကိုအသုံးပြုခြင်း - PHP သည် BCMATT တိုးချဲ့မှုကိုမြင့်မားသောတိကျသောရေပေါ်အမှတ်တွက်ချက်မှုများကိုကိုင်တွယ်ရန်,

     <?php
    echo bcadd('0.1', '0.2', 2);  // ထုတ်လုပ်ခြင်း 0.30
    ?>
    
  3. ရေပေါ်အချက်များကိုနှိုင်းယှဉ်သောအခါသည်းခံစိတ်ကိုအသုံးပြုသည် ။ ရေပေါ်အချက်နှစ်ချက်ကိုနှိုင်းယှဉ်သောအခါသူတို့၏ခြားနားချက်သည်သည်းခံစိတ်တန်ဖိုးထက်နည်းပါက၎င်းတို့သည်တန်းတူဖြစ်သည်ဟုယူမှတ်ကြသည်။

     <?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 ာရေးကွန်ပြူတာကွန်ပျူတာတွက်ချက်ခြင်းစသဖြင့်) အချို့သောစီးပွားရေးအခြေအနေများတွင်ဆိုးကျိုးများဖြစ်ပေါ်စေနိုင်သည်။ ထို့ကြောင့်ကျွန်ုပ်တို့သည်ရေပေါ်အမှတ်တွက်ချက်မှုများကိုလုပ်ဆောင်သောအခါရလဒ်များ၏တိကျမှန်ကန်မှုကိုသေချာစေရန်သတိထားရမည်။