လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> [= သို့မဟုတ် === အစား bcccomp function ကိုသုံးရန်အဘယ်ကြောင့်အကြံပြုလိုသနည်း။ ခွဲခြမ်းစိတ်ဖြာခြင်းဖြစ်ပေါ်စေသည်

[= သို့မဟုတ် === အစား bcccomp function ကိုသုံးရန်အဘယ်ကြောင့်အကြံပြုလိုသနည်း။ ခွဲခြမ်းစိတ်ဖြာခြင်းဖြစ်ပေါ်စေသည်

gitbox 2025-08-22

PHP တွင် floating-point နံပါတ်များကိုနှိုင်းယှဉ်ခြင်းသည်အမြဲတမ်းခက်ခဲသောပြ problem နာဖြစ်သည်။ floating-point နံပါတ်များကိုတိကျမှုန့်ကန့်သတ်ချက်များကြောင့် floating-point နံပါတ်များကိုနှိုင်းယှဉ်ရန်တိုက်ရိုက်ထုတ်လွှ င့ ်ခြင်းများ ကိုတိုက်ရိုက်အသုံးပြုခြင်းသည်မတိကျသောရလဒ်များဖြစ်ပေါ်စေနိုင်သည်။ ထို့ကြောင့် Php developer များစွာသည် BCONPP () function ကိုအသုံးပြုရန်အကြံပြုလိုသည်။ ဤဆောင်းပါးသည် floating point နံပါတ်များကိုနှိုင်းယှဉ်ရန်အတွက် BCOMPP () ကို အသုံးပြုရန်အတွက်ဘာကြောင့်အကြံပြုရန် အကြံပြု ထားသနည်းအသေးစိတ်ကိုလေ့လာလိမ့်မည်

1 ။ Floating Point တိကျမှန်ကန်မှုပြ problem နာ

Floating Point နံပါတ်များကိုကွန်ပျူတာများတွင်အသုံးပြုလေ့ရှိသည်။ Flowating-Points နံပါတ်များသည်အကန့်အသတ်ရှိသောဂဏန်းများဖြင့် binary နံပါတ်များကိုကိုယ်စားပြုသောကြောင့်ခန့်မှန်းခြေအားဖြင့်အချို့သော decimal နံပါတ်များကိုတိကျစွာကိုယ်စားပြုရန်ပျက်ကွက်လေ့ရှိသည်။ ဥပမာအားဖြင့် 0.1 ကို ကွန်ပျူတာတစ်ခုတွင် 0.1 နှင့်တိတိကျကျမဖော်ပြနိုင်ပါ။ ၎င်းသည်အမှန်တကယ် 0.1 နှင့်နီးစပ်သောနံပါတ်များနှင့်ဤတိကျမှန်ကန်မှုအမှားများသည်တွက်ချက်မှုတွင်တဖြည်းဖြည်းစုဆောင်းနိုင်သည်။

floating-point နံပါတ်များကိုနှိုင်းယှဉ်ရန် == သို့မဟုတ် === ကိုအသုံးပြုပြီး floating-point နံပါတ်များကိုနှိုင်းယှဉ်ရန်နှင့်နှိုင်းယှဉ်ရန်အနည်းငယ်ကွာခြားမှုရှိပါကနှိုင်းယှဉ်မှုရလဒ်များသည်မျှော်မှန်းထားသည်ထက်ပိုမိုဆိုးရှားနိုင်သည်။ ဥပမာအားဖြင့်:

 <span><span><span class="hljs-variable">$a</span></span><span> = </span><span><span class="hljs-number">0.1</span></span><span> + </span><span><span class="hljs-number">0.2</span></span><span>;
</span><span><span class="hljs-variable">$b</span></span><span> = </span><span><span class="hljs-number">0.3</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$a</span></span><span> == </span><span><span class="hljs-variable">$b</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"တူညီသော"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"不တူညီသော"</span></span><span>;
}
</span></span>

အထက်ပါကုဒ်သည် အချို့သော ပတ်ဝန်းကျင်တွင် "မညီမျှမှု" ဖြစ်လိမ့်မည်

2 ။ BCcomp () function ကို၏အားသာချက်များ

BCcomp () သည် PHP တွင် function တစ်ခုဖြစ်သည်။ ၎င်းသည်ပုံမှန် == နှင့် === , BCOMP () နှင့်ကွဲပြားခြားနားသည်။

BCcomp () function ၏ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -

 <span><span><span class="hljs-title function_ invoke__">bccomp</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$left_operand</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$right_operand</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$scale</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>): </span><span><span class="hljs-keyword">int</span></span><span>
</span></span>
  • $ left_operand နှင့် $ rigt_operand နှင့်နှိုင်းယှဉ်ခံရဖို့ floating အမှတ်နံပါတ်နှစ်စီးနှင့် string တစ်ခုအဖြစ်လွန်ရပါမည်။

  • $ စကေး parameter သည်ဒ decimal မအချက်အပြီးဂဏန်းအများဆုံးအရေအတွက်ကိုသတ်မှတ်သည်, ဆိုလိုသည်မှာနှိုင်းယှဉ်နေစဉ်အတွင်းတိကျမှန်ကန်မှုကိုထိန်းသိမ်းထားသည်။

BCcomp () function သည်ကိန်းတစ်ခု၏တန်ဖိုးကိုပြန်ပို့သည်။

  • ပထမ ဦး ဆုံး parameter သည်ဒုတိယ parameter သည်ထက်ကြီးလျှင်ပြန်လာ 1;

  • နှစ်ခု parametersters တန်းတူလျှင်,

  • ပထမ ဦး ဆုံး parameter သည်ဒုတိယ parameter သည်ထက်သေးငယ်လျှင် -11 ။

BCCOMP () ကို အသုံးပြုခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်ကွန်ပျူတာ floating-point ကိုယ်စားပြုမှုအမှားများကြောင့်သက်ရောက်မှုမရှိသောရေပေါ်အမှတ်အသားနှင့်နှိုင်းယှဉ်ခြင်း၏တိကျမှန်ကန်မှုကိုမျှော်လင့်ထားသည့်အကွာအဝေးအတွင်းထိန်းချုပ်ထားသည်။

3 ။ BCONPOP () floating point နှိုင်းယှဉ်ဘို့

BCOCCPP () ကို အသုံးပြု. floating-point နံပါတ်များကိုနှိုင်းယှဉ်ရန်အတွက် floating-point နံပါတ်များကို string format ကိုပြောင်းလဲရန်နှင့်သင့်လျော်သောတိကျမှုကိုပြောင်းလဲရန်လိုအပ်သည်။ ဥပမာအားဖြင့်:

 <span><span><span class="hljs-variable">$a</span></span><span> = </span><span><span class="hljs-number">0.1</span></span><span> + </span><span><span class="hljs-number">0.2</span></span><span>;
</span><span><span class="hljs-variable">$b</span></span><span> = </span><span><span class="hljs-number">0.3</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">bccomp</span></span><span>((</span><span><span class="hljs-keyword">string</span></span><span>)</span><span><span class="hljs-variable">$a</span></span><span>, (</span><span><span class="hljs-keyword">string</span></span><span>)</span><span><span class="hljs-variable">$b</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>) == </span><span><span class="hljs-number">0</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"တူညီသော"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"不တူညီသော"</span></span><span>;
}
</span></span>

ဤဥပမာတွင်ကျွန်ုပ်တို့သည် floating point နံပါတ်များကို ဒေါ်လာ နှင့် $ b ကို string တစ်ခုထဲသို့ပြောင်းလဲပြီး 10 bits သို့တိကျစွာသတ်မှတ်ထားသည်။ ၎င်းသည်မှားယွင်းသော floating point ကိုယ်စားပြုမှုကြောင့်မှားယွင်းသောနှိုင်းယှဉ်ချက်များကိုရှောင်ရှားလိမ့်မည်။

4 ။ တိကျစွာထိန်းချုပ်မှု၏အရေးပါမှု

BCcomp () သည် $ စကေး parameter မှတစ်ဆင့်နှိုင်းယှဉ်ခြင်း၏တိကျမှန်ကန်မှုကိုသတ်မှတ်ရန်ခွင့်ပြုသည်။ ၎င်းသည်ဘဏ် finance ာရေး, သိပ္ပံဆိုင်ရာကွန်ပျူတာနှင့်အခြားနယ်ပယ်များတွင်ပါ 0 င်သည့် floating point အရေအတွက်အတွက်အထူးအရေးကြီးသည်။ ဤကွက်လပ်များတွင် floating-point နံပါတ်များ၏တိကျမှုသည်မြင့်မားသောကြောင့်တိကျမှန်ကန်စွာနှိုင်းယှဉ်ခြင်းကအလွန်အရေးကြီးသည်။

ဥပမာအားဖြင့်, ဘဏ် financial ာရေးဆိုင်ရာလျှောက်လွှာများတွင်စျေးနှုန်းနှင့်ပမာဏကဲ့သို့သော floating တန်ဖိုးများတွင်ဒ decimal မအချက်အပြီးဂဏန်းများစွာပါ 0 င်နိုင်သည်။ တိကျမှန်ကန်မှုကိုမထိန်းချုပ်နိုင်ပါက၎င်းသည်နည်းပါးသောနည်းများကိုတွက်ချက်ခြင်းသို့မဟုတ်ယုတ္တိအမှားများကိုပင်တွက်ချက်ခြင်းကဲ့သို့သောသိမ်မွေ့သောအမှားများကိုဖြစ်ပေါ်စေနိုင်သည်။

 <span><span><span class="hljs-variable">$price1</span></span><span> = </span><span><span class="hljs-string">"10.005"</span></span><span>;
</span><span><span class="hljs-variable">$price2</span></span><span> = </span><span><span class="hljs-string">"10.00499"</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">bccomp</span></span><span>(</span><span><span class="hljs-variable">$price1</span></span><span>, </span><span><span class="hljs-variable">$price2</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>) == </span><span><span class="hljs-number">0</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"价格တူညီသော"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"价格不တူညီသော"</span></span><span>;
}
</span></span>

ဒီဥပမာမှာတိကျမှုတွေကိုသတ်မှတ်ခြင်းအားဖြင့် 4 အထိစျေးနှုန်းနဲ့ပတ်သက်ပြီးတိကျမှန်ကန်မှုပြ issues နာတွေကြောင့်အမှားအယွင်းတွေမရှိဘူးလို့သေချာပါတယ်။

5 ။ == နှင့် === ၏အကန့်အသတ်

PHP တွင် == နှင့် === သည်အလွန်များပြားသော်လည်း၎င်းတို့သည် floating point နှိုင်းယှဉ်မှုများအတွက်မသင့်တော်ပါ။ သတ်သတ်မှတ်မှတ်အကြောင်းပြချက်မှာအောက်ပါအတိုင်းဖြစ်သည် -

  • == - operand နှစ်ခုသည်နှိုင်းယှဉ်လျှင်အမျိုးအစား - ပြောင်းလဲခြင်းဖြစ်သည်။ ၎င်းသည်မလိုလားအပ်သောရလဒ်များကိုဖြစ်ပေါ်စေနိုင်သည်။ floating-point နံပါတ်များကိုနှိုင်းယှဉ်သောအခါ == တိ ကျမှန်ကန်မှုပြ problem နာကိုလျစ်လျူရှုထားပြီးတန်ဖိုးနှစ်ခုသည်တန်းတူရှိမရှိကိုသာဂရုပြုနိုင်သည်။

  • === : == - အမျိုးအစားပြောင်းလဲခြင်းမပြုလုပ်ပါ, Floating Point နံပါတ်များ၏တိကျမှန်ကန်မှုအမှားကြောင့် === တန်ဖိုးနှစ်ခုသည်အလွန်နီးကပ်နေလျှင်ပင် မှားယွင်းစွာ ပြန်ပို့နိုင်သည်။

ဥပမာအားဖြင့်:

 <span><span><span class="hljs-variable">$a</span></span><span> = </span><span><span class="hljs-number">0.1</span></span><span> + </span><span><span class="hljs-number">0.2</span></span><span>;
</span><span><span class="hljs-variable">$b</span></span><span> = </span><span><span class="hljs-number">0.3</span></span><span>;

</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$a</span></span><span> == </span><span><span class="hljs-variable">$b</span></span><span>);  </span><span><span class="hljs-comment">// false</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$a</span></span><span> === </span><span><span class="hljs-variable">$b</span></span><span>); </span><span><span class="hljs-comment">// false</span></span><span>
</span></span>

floating-point တိကျမှန်ကန်မှုအမှားများတည်ရှိနေသောကြောင့် == သို့မဟုတ် === ကိုနှိုင်းယှဉ်ခြင်းအတွက် floating-point နံပါတ်များကိုနှိုင်းယှဉ်ရန်အမြဲတမ်းယုံကြည်စိတ်ချရသောကြောင့်ဖြစ်သည်။

6 ။ နိဂုံးချုပ်

floating-point နံပါတ်များကိုတိကျမှန်ကန်စွာကန့်သတ်ချက်ကြောင့် floating-point နံပါတ်များကိုနှိုင်းယှဉ်ရန်တိုက်ရိုက်ထုတ်လွှ င့ ်ခြင်းများ ကိုအသုံးပြုခြင်းသည်မတိကျသောရလဒ်များကိုတိုက်ရိုက်ဖြစ်စေနိုင်သည်။ ဤပြ problem နာကိုဖြေရှင်းရန် BCcomp () function ကိုအသုံးပြုရန်အကြံပြုသည်။ ၎င်းသည်ရေပေါ်အမှတ်အသားနံပါတ်များကိုမတိကျသောကိုယ်စားပြုမှုများကြောင့်ဖြစ်နိုင်ချေရှိသောအမှားများကိုနှိုင်းယှဉ်ခြင်းအားဖြင့်နှိုင်းယှဉ်ခြင်း၏တိကျမှန်ကန်မှုကိုထိန်းချုပ်ရန်ညွှန်ကြားထားသည်။ မြင့်မားသောတိကျစွာနှိုင်းယှဉ်ချက်များပါ 0 င်သည့်အခြေအနေများတွင် BCcomp () သည် ပို. စိတ်ချရသောနှင့်ပိုမိုလုံခြုံသောရွေးချယ်မှုဖြစ်သည်။