လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ကြီးမားသောတန်ဖိုးများကိုစစ်ဆေးသည့်အခါ PHP ၏ is_DoUboble function တွင်မည်သည့်ထောင်ချောက်များနှင့်ကြိုတင်ကာကွယ်မှုများရှိသနည်း။

ကြီးမားသောတန်ဖိုးများကိုစစ်ဆေးသည့်အခါ PHP ၏ is_DoUboble function တွင်မည်သည့်ထောင်ချောက်များနှင့်ကြိုတင်ကာကွယ်မှုများရှိသနည်း။

gitbox 2025-06-15

PHP တွင် IS_DOUBEE () function ကိုပေးထားသော variable သည်နှစ်ဆတည်းသောရေပေါ်အမှတ်အသားနံပါတ် (i.e. , float type အမျိုးအစား) သည်ရှိမရှိရှာဖွေရန်အသုံးပြုသည်။ အလွန်ကြီးမားသောသို့မဟုတ်အလွန်သေးငယ်သောတန်ဖိုးများကိုဖော်ပြသည့်အခါ floating points သည်အလွန်အသုံးဝင်သည်, သို့သော်အထူးသဖြင့်ကြီးမားသောတန်ဖိုးများကိုကိုင်တွယ်ရာတွင်အချို့သောထောင်ချောက်များရှိသည်။ ဤဆောင်းပါးသည်ကြီးမားသော တန်ဖိုးများ ကိုစစ်ဆေးသည့်အခါ,

1 ။ PHP ရဲ့ floating point နံပါတ်ကိုယ်စားပြုမှုနည်းလမ်း

PHP ရှိ floating-point နံပါတ်များသည်များသောအားဖြင့် IEEE 754 စံနှုန်းကိုလိုက်နာလေ့ရှိသည်။ ဤစံနှုန်းအရ floating point နံပါတ်တစ်ခုသည်အပိုင်းသုံးပိုင်းပါ 0 င်သည်။ Floating-point နံပါတ်များကိုနည်းလမ်းများအကန့်အသတ်ဖြင့်သာဖော်ပြသောကြောင့်၎င်းတို့သည်အရေအတွက်အကန့်အသတ်ဖြင့်တိကျစွာမဖော်ပြနိုင်, အထူးသဖြင့်အလွန်ကြီးမားသောသို့မဟုတ်အလွန်သေးငယ်သောတန်ဖိုးများကိုအတိအကျမဖော်ပြနိုင်ပါ။ ၎င်းသည်အထူးသဖြင့်ကြီးမားသောတန်ဖိုးများကိုစစ်ဆေးသည့်အခါ၎င်းသည်မမျှော်လင့်သောအပြုအမူများကိုဖြစ်ပေါ်စေနိုင်သည်။

ဥပမာအားဖြင့် PHP တွင် Floating-point နံပါတ်များ၏တိကျမှုသည်အကန့်အသတ်ရှိသည်, များသောအားဖြင့် 15-16-bit Decimals နံပါတ်များဖြစ်သည်။ ဆိုလိုသည်မှာအချို့သောကိစ္စရပ်များတွင်ဤတိကျမှုအကွာအဝေး ထက် ကျော်လွန်သောတန်ဖိုးများကိုတိကျစွာမဖော်ပြနိုင်ပါ။

2 ။ ကြီးမားသောတန်ဖိုးများ၏တိကျမှန်ကန်မှုပြ problem နာ

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

 <span><span><span class="hljs-variable">$bigNumber</span></span><span> = </span><span><span class="hljs-number">12345678901234567890</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_double</span></span><span>(</span><span><span class="hljs-variable">$bigNumber</span></span><span>));  </span><span><span class="hljs-comment">// ထုတ်လုပ်ခြင်း bool(true)</span></span><span>
</span></span>

ဤကုဒ်တွင် $ bigner သည် အလွန်ကြီးမားသည့်အလွန်ကြီးမားသောကိန်းဂဏန်းများဖြစ်သည်။ PHP မှတန်ဖိုးကို floating point နံပါတ်သို့ကူးပြောင်းသည့်အခါအချို့သောတိ ကျသော (တစ်စုံတစ်ရာသည် လုံးဝ ပျောက်ဆုံးသွားနိုင်သည်။

3 ။ floating အမှတ်နံပါတ်များ၏ကိုယ်စားပြုမှုအမှား

Floating-Point Numbers တွင်တိကျမှန်ကန်မှုအကန့်အသတ်ရှိသည်, အထူးသဖြင့်ကြီးမားသောတန်ဖိုးများကိုကိုင်တွယ်ရာတွင်ကိုယ်စားပြုမှုအမှားများဖြစ်ပေါ်နိုင်သည်။ ကျွန်ုပ်တို့တွင်အောက်ပါကုဒ်ရှိသည်ဆိုပါစို့။

 <span><span><span class="hljs-variable">$number</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-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$number</span></span><span>);  </span><span><span class="hljs-comment">// ထုတ်လုပ်ခြင်း float(0.30000000000000004)</span></span><span>
</span></span>

အထက်ပါကုဒ်သည် floating အမှတ်နံပါတ်များ၏ကိုယ်စားပြုမှုအမှားကိုပြသသည်။ ရလဒ်သည် 0.3 ဖြစ်ရန်မျှော်လင့်သော်လည်းအမှန်တကယ်ရလဒ်မှာ floating point နံပါတ်များကိုတိကျမှန်ကန်စွာကန့်သတ်ချက်ကြောင့် 0.300000000000000000000004 ဖြစ်သည်။ ကြီးမားသောတန်ဖိုးများကိုစစ်ဆေးသည့်အခါဤအမှားသည်အထူးသဖြင့်ထင်ရှားသည်။ ဤအမှားများသည် is_double () function ကိုအကျိုးသက်ရောက်နိုင်သည်။

4 ။ is_double () နှင့်အခြားစစ်ဆေးမှုများအမျိုးအစားများ

PHP တွင် floating point နံပါတ်များကိုစစ်ဆေးရန်အထူးသဖြင့် PHP တွင် float အမျိုးအစားသည်ကိန်းဂဏန်းအမျိုးအစားများဖြစ်သည်။ ကြီးမားသောကိန်းဂဏန်းများတွင် အလွဲသုံးစားမှု ကိုရှောင်ရှားရန်ရှောင်ရှားနိုင်ရန်အတွက်အခြားအမျိုးအစားစစ်ဆေးမှုများလုပ်ဆောင်ချက်များကို is_int () နှင့် is_numeric () နှင့်ပေါင်းစပ်နိုင်သည်။ ဥပမာအားဖြင့်:

 <span><span><span class="hljs-variable">$number</span></span><span> = </span><span><span class="hljs-number">12345678901234567890</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_numeric</span></span><span>(</span><span><span class="hljs-variable">$number</span></span><span>)) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_int</span></span><span>(</span><span><span class="hljs-variable">$number</span></span><span>)) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This is an integer.\n"</span></span><span>;
    } </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_double</span></span><span>(</span><span><span class="hljs-variable">$number</span></span><span>)) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This is a double.\n"</span></span><span>;
    }
}
</span></span>

is_numeric () ကို ပေါင်းစပ်ခြင်းအားဖြင့်သင်သည် variable ကိုမှန်ကန်သောနံပါတ်တစ် ခု ဟုတ်မဟုတ်ကိုပထမဆုံးစစ်ဆေးနိုင်သည်

5 ။ ကြီးမားသောတန်ဖိုးများကိုကိုင်တွယ်ရန် GMP extension ကိုသုံးပါ

အလွန်ကြီးမားသည့်တန်ဖိုးများလိုအပ်သည့်ဖြစ်ရပ်များအတွက် PHP သည်မြင့်မားသောဂဏန်းတွက်ချက်မှုများအတွက် GMP extension များကိုထောက်ပံ့ပေးသည်။ GMP extension သည်သင့်အား floating point တိကျမှန်ကန်မှုကိုမစိုးရိမ်ဘဲတိကျမှန်ကန်မှုမရှိဘဲမတရားအရွယ်အစားမဆုံးရှုံးဘဲထပ်ဆင့်မလျူဘဲခွဲဝေမှုကိုကိုင်တွယ်ရန်ခွင့်ပြုသည်။

ဥပမာအားဖြင့်, ကြီးမားသောကိန်းကိုကိုင်တွယ်ရန် GMP extension များကိုသုံးပါ။

 <span><span><span class="hljs-variable">$bigNumber</span></span><span> = </span><span><span class="hljs-title function_ invoke__">gmp_init</span></span><span>(</span><span><span class="hljs-string">"123456789012345678901234567890"</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$bigNumber</span></span><span>);  </span><span><span class="hljs-comment">// ထုတ်လုပ်ခြင်း一个 GMP ကန့်ကွက်</span></span><span>
</span></span>

GMP extension နှင့်အတူ PHP Built-in floating point နံပါတ်များကိုတိကျမှန်ကန်စွာရှောင်ရှားနိုင်ပြီးမြင့်မားသောကိန်းဂဏန်းတွက်ချက်မှုများကိုပြုလုပ်နိုင်သည်။ သတိပြုသင့်သည်မှာ IS_DOUBUBE () သည် GMP အမျိုးအစားကိန်းဂဏန်းများနှင့်သက်ဆိုင်ခြင်းမရှိသောကြောင့်ဤကိစ္စတွင် is_Resource () သို့မဟုတ် cmp function ကိုအသုံးပြုရန်လိုအပ်သည်။

6 ။ is_double ၏ကန့်သတ်ချက်များ ()

is_Double () အချို့သောသတ်သတ်မှတ်မှတ်အခြေအနေများတွင်အထင်မြင်မှားစေသောနိုင်ပါတယ်။ Floating-point တိကျမှုကန့်သတ်ချက်များကြောင့် PHP သည်ကိန်းဂဏန်းများအလွန်ကြီးမားသည့်အခါ php သည် floating-point နံပါတ်မှတိကျစွာခွဲခြားနိုင်မည်မဟုတ်ပါ။ ဥပမာအားဖြင့်, is_Doubleble () ကို အောက်ပါကုဒ်များတွင်ရှာဖွေတွေ့ရှိမှုသည်တိကျသောရလဒ်ကိုဖြစ်ပေါ်စေလိမ့်မည်။

 <span><span><span class="hljs-variable">$largeInt</span></span><span> = </span><span><span class="hljs-number">12345678901234567890</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">is_double</span></span><span>(</span><span><span class="hljs-variable">$largeInt</span></span><span>) ? </span><span><span class="hljs-string">"Double\n"</span></span><span> : </span><span><span class="hljs-string">"Not Double\n"</span></span><span>;  </span><span><span class="hljs-comment">// ထုတ်လုပ်ခြင်း Not Double</span></span><span>
</span></span>

အချို့ဖြစ်ရပ်များတွင် ဒေါ်လာကြီးဌာန , ကိန်းဂဏန်းများသည် floating point တိကျမှု၏ကိုယ်စားပြုမှုအကွာအဝေးထက်ကျော်လွန်သောကြောင့်၎င်းသည် floating point tality ထက်ကျော်လွန်သောကြောင့်၎င်းကိုမှားယွင်းစွာပြုလုပ်နိုင်သည်။

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

PHP'S_DOUBEE () function ကိုအသုံးပြုသောအခါအထူးသဖြင့်ကြီးမားသောတန်ဖိုးများကိုကိုင်တွယ်သောအခါ, floating-point နံပါတ်များ၏တိကျမှန်ကန်မှုကိုကန့်သတ်ချက်များနှင့် ပတ်သက်. သတိထားရန်လိုအပ်သည်။ IS_DOUBEES () function သည် floating point numbers ၏တိကျမှန်ကန်မှုပြ problem နာကိုတိကျစွာ ခွဲခြား. မဖော်ပြနိုင်ပါ။ ဤပြ problem နာမျိုးကိုရှောင်ရှားရန်အခြားအမျိုးအစားစစ်ဆေးခြင်းလုပ်ဆောင်ချက်များကိုသူတို့နှင့် တွဲဖက်. သုံး. Super-concers ပြည့်ဝသောကိန်းဂဏန်းများကိုကိုင်တွယ်ရန် GMP extensions ကိုအသုံးပြုရန်စဉ်းစားနိုင်သည်။ ဤအလားအလာရှိသောအန္တရာယ်များကိုနားလည်ခြင်းအားဖြင့် developer များသည်ကြီးမားသောတန်ဖိုးထားသည့်ပရိုဂရမ်စိန်ခေါ်မှုများကိုပိုမိုကောင်းမွန်စွာကိုင်တွယ်နိုင်သည်။