လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> floating point တိကျမှန်ကန်မှုကြောင့်ဖြစ်ရတဲ့စာရင်းအင်းအမှားများကိုဘယ်လိုရှောင်ရှားမလဲ။

floating point တိကျမှန်ကန်မှုကြောင့်ဖြစ်ရတဲ့စာရင်းအင်းအမှားများကိုဘယ်လိုရှောင်ရှားမလဲ။

M66 2025-06-07

Floating Point တိကျမှုပြ problems နာများသည်ပရိုဂရမ်းမင်းတွင်အထူးသဖြင့်သင်္ချာတွက်ချက်မှုများနှင့်ပတ်သက်လာလျှင်ဖြစ်သည်။ Floating Point နံပါတ်များကိုကွန်ပျူတာများတွင်ကိုယ်စားပြုသည်။ PHP တွင်အထူးသဖြင့်စာရင်းအင်းများနှင့်တွက်ချက်မှုများနှင့်ပတ်သက်သောအခါ, ထို့ကြောင့် floating point တိကျမှုပြ problems နာများကြောင့်ဖြစ်ရတဲ့စာရင်းအင်းအမှားများကိုကျွန်ုပ်တို့မည်သို့ရှောင်ရှားနိုင်မည်နည်း။ ဤဆောင်းပါးသည်ဤပြ problems နာများကိုမည်သို့ဖြေရှင်းရမည်ကိုမည်သို့ဖြေရှင်းရမည်ကိုဆွေးနွေးပါမည်

1 ။ Floating Point တိကျမှန်ကန်မှုပြ problems နာများကိုခြုံငုံသုံးသပ်ချက်

Floating Point တိကျမှုပြ problems နာများကိုများသောအားဖြင့်ကွန်ပျူတာအတွင်းရှိ floating point နံပါတ်များကိုကိုယ်စားပြုမှုဖြင့်ကန့်သတ်ချက်များကြောင့်ဖြစ်သည်။ ကွန်ပြူတာများသည် Finite Memory တွင် floating-point နံပါတ်များကိုသာကိုယ်စားပြုနိုင်ပြီး floating-point numbers ၏တိကျမှုသည်အကန့်အသတ်ဖြင့်သာဖြစ်သည်။ ဥပမာအားဖြင့် 0.1 + 0.2 ကို ဖော်ပြခြင်းသည်ခန့်မှန်းခြေအားဖြင့် 0.3 ထက်ခန့်မှန်းခြေအားဖြင့်ခန့်မှန်းခြေအားဖြင့်ဖြစ်သည်။

ထိုကဲ့သို့သောပြ problems နာများသည်စာရင်းအင်းလုပ်ငန်းစဉ်တွင်အထူးအရေးကြီးသည်။

2 ။ မျောနေသောအချက်တိကျပြန်ပြ problems နာများကိုရှောင်ရှားရန်သာမန်နည်းလမ်းများ

Floating Point တိကျမှုပြ problems နာများကြောင့်ဖြစ်ပေါ်လာသောအမှားများကိုရှောင်ရှားနိုင်ရန်အတွက်အောက်ပါနည်းလမ်းများကိုကျင့်သုံးနိုင်သည်။

  1. floating-point နံပါတ်များအစားကိန်းကိုသုံးပါ ။ ဖြစ်နိုင်လျှင် floating-point နံပါတ်ကိုတွက်ချက်ရန်အတွက်ကိန်းဂဏန်းများသို့ပြောင်းပါ။ ဥပမာအားဖြင့်, အကယ်. သင်ငွေပမာဏကိုကိုင်တွယ်ရန်လိုအပ်ပါက၎င်းသည် floating point နံပါတ်များ၏တိကျမှန်ကန်မှုကိုရှောင်ရှားနိုင်သည့် "အသင်းဝင်" အစား "အသင်းဝင်" အစား "မိနစ်" သို့ပြောင်းလဲနိုင်သည်။

     $amount = 0.1 * 100;  // တစ်ခုကိန်းဖြစ်လာသည်
    $amount = round($amount);  // floating အမှားများကိုရှောင်ကြဉ်ပါ
    
  2. BCMath function ကိုအသုံးပြုခြင်း - PHP သည် bcmath extension ကိုအထူးသဖြင့်တိကျသောသင်္ချာတွက်ချက်မှုများအတွက်အထူးအသုံးပြုသော BCMath တိုးချဲ့မှုကိုပေးသည်။ ၎င်းသည် ploating-point နံပါတ်များ၏တိကျမှန်ကန်မှုကိုရှောင်ရှားနိုင်သည်။ ဤတိုးချဲ့မှုမှတစ်ဆင့်ဒ decimal မအချက်အပြီးဂဏန်းအရေအတွက်ကိုတိကျစွာထိန်းချုပ်နိုင်ပြီးရေပေါ်အမှားများကိုရှောင်ရှားနိုင်သည်။

     $result = bcadd('0.1', '0.2', 2);  // အသုံးပြုbcmathfunction ကိုတွက်ချက်မှု
    echo $result;  // ထုတ်လုပ်ခြင်း 0.3
    
  3. Set Pultion : PHP မှ Ini_set () function သည် floating point နံပါတ်များကိုသတ်မှတ်ရန်ခွင့်ပြုသည်။ ပိုမိုမြင့်မားသောတိကျမှန်ကန်မှုကိုသတ်မှတ်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည် application တစ်ခုတွင် floating point အမှားအယွင်းများ၏သက်ရောက်မှုကိုလျှော့ချနိုင်သည်။

     ini_set('precision', 14);
    

3 ။ array_count_valuature စာရင်းအင်းရလဒ်များသည်တိကျမှန်ကန်မှုရှိစေရန်

array_count_values ​​သည် PHP တွင်အလွန်အသုံးဝင်သော function တစ်ခုဖြစ်သည်။ ၎င်းသည်တန်ဖိုးများအားလုံး၏အဖြစ်အပျက်များကိုခင်းကျင်းစွာထည့်သွင်းပြီး Associative Array ကိုပြန်ပေးနိုင်သည်။ Array ၏သော့သည်တန်ဖိုးကိုတန်ဖိုးနှင့်ခင်းကျင်းမှု၏တန်ဖိုးသည်တန်ဖိုး၏သက်ကြီးရွယ်အိုများဖြစ်သည်။

သို့သော် floating point တိကျမှုပြ issues နာများသည်အထူးသဖြင့် Array တစ်ခုတွင် floating point တန်ဖိုးများအပါအ 0 င် floating point တန်ဖိုးများအပါအ 0 င် floating points အပါအ 0 င်သည့်အခါ array_count_values ​​function ၏စာရင်းအင်း၏စာရင်းအင်းရလဒ်များကိုအကျိုးသက်ရောက်နိုင်သည်။ တိကျသောစာရင်းအင်းရလဒ်များကိုသေချာစေရန်, အောက်ပါအစီအမံများကိုအကြံပြုပါသည်။

  1. floating point တန်ဖိုးများကို rounding : floating point တန်ဖိုးများအတွက်, array_count_values ​​မခေါ်မီသင်ပတ်ပတ်လည်နိုင်ပါတယ်။ စာရင်းအင်းဆိုင်ရာအခြေခံဥပဒေများ၏ရှေ့နောက်ညီညွတ်မှုကိုသေချာစေရန်ဒ decimal မသောနေရာများသို့ floating point တန်ဖိုးကိုပတ် 0 န်းကျင်ကိုလှည့်ပတ်ရန် () function ကိုသုံးပါ။

     $numbers = [0.1, 0.2, 0.1, 0.2, 0.3];
    $roundedNumbers = array_map(function($value) {
        return round($value, 2);
    }, $numbers);
    
    $counts = array_count_values($roundedNumbers);
    print_r($counts);
    

    ဤနည်းအားဖြင့် floating point နံပါတ်များကိုတွက်ချက်ရာတွင်အမှားအယွင်းများအနည်းငယ်သာရှိပါကနောက်ဆုံးစာရင်းအင်းရလဒ်များသည်တိကျမှန်ကန်မှုရှိလိမ့်မည်။

  2. floating point တန်ဖိုးများ၏စည်းလုံးညီညွတ်မှုပုံစံများ - ခင်းကျင်းထဲရှိရေပေါ်အမှတ်အသားတန်ဖိုးများတွင်ဒ decimal မနေရာများပါ 0 င်ပါက,

     $numbers = [0.1, 0.1000000001, 0.2000000001];
    $formattedNumbers = array_map(function($value) {
        return number_format($value, 2, '.', '');
    }, $numbers);
    
    $counts = array_count_values($formattedNumbers);
    print_r($counts);
    
  3. ကြီးမားသောစကေးအမှားများကိုကိုင်တွယ်ပါ ။ အချက်အလက်များတွင် floating အမှားအယွင်းများစွာရှိလျှင် Floating အမှားများကိုစာရင်းအင်းရလဒ်များအပေါ်သက်ရောက်မှုကိုလျှော့ချရန် Floating Range ကိုကန့်သတ်ရန်စဉ်းစားနိုင်သည်။

     $numbers = [0.1000001, 0.1000002, 0.2000001, 0.2000002];
    $adjustedNumbers = array_map(function($value) {
        return round($value, 6);  // သာခြောက်လ decimal မထားတဲ့နေရာတွေကိုထိန်းသိမ်းထားတယ်
    }, $numbers);
    
    $counts = array_count_values($adjustedNumbers);
    print_r($counts);
    

4 ။ အကျဉ်းချုပ်

PHP တွင် Floating Point တိကျမှုပြ problems နာများသည်စာရင်းအင်းအမှားများအတွက်အရေးကြီးသောအကြောင်းပြချက်ဖြစ်သည်။ စာရင်းအင်းများအတွက် array_count_valuates ကို သုံးသောအခါ floating-point နံပါတ်များရှိအမှားများသည်နောက်ဆုံးရလဒ်ကိုအကျိုးသက်ရောက်နိုင်သည်။ ထို့ကြောင့်ကျွန်ုပ်တို့သည်ဤပြ problem နာကိုအောက်ပါနည်းလမ်းများဖြင့်ရှောင်ရှားနိုင်သည်။

  • producting များအတွက် floating အမှတ်နံပါတ်များကိုကိန်းဂဏန်းများအတွက်ပြောင်းလဲ။

  • မြင့်မားသော - တိကျ bcmath တိုးချဲ့မှုကိုသုံးပါ။

  • ရှေ့နောက်ညီညွတ်မှုကိုသေချာစေရန် floating point နံပါတ်များကိုလှည့်ပတ်။

ဤအစီအမံများကိုရယူခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်စာရင်းအင်းရလဒ်များ၏တိကျမှန်ကန်မှုကိုသေချာစေရန်နှင့် floating အမှားများကြောင့်ဖြစ်ပေါ်လာသောပြ problems နာများကိုရှောင်ရှားနိုင်သည်။