PHP Development တွင် CEIL () function ကိုမကြာခဏတက်လေ့ရှိပြီးတစ်ခါတစ်ရံတွင်ကျွန်ုပ်တို့မျှော်လင့်ထားသည့်ရလဒ်များသည်ကျွန်ုပ်တို့မျှော်လင့်ထားသည့်ကိန်းဂဏန်းများမဟုတ်ကြောင်းတွေ့ရှိရသည်။ စင်စစ်အားဖြင့်ဤအခြေအနေ၏အခြေခံအကြောင်းရင်းမှာ floating အမှတ်နံပါတ်များ၏ကိုယ်စားပြုမှုနှင့်စစ်ဆင်ရေးအမှားဖြစ်သည်။ ဤဆောင်းပါးသည်ဤပြ problem နာ၏အကြောင်းရင်းများကိုအသေးစိတ်လေ့လာပြီးထိရောက်သောဖြေရှင်းနည်းများပေးလိမ့်မည်။
CEILI () function ၏ function သည် နံပါတ်တစ်ခုကိုလှည့်ပတ် ။ အသေးငယ်ဆုံးကိန်းကိုပြန်ပို့ရန်ဖြစ်သည်။ ဥပမာအားဖြင့်:
<?php
echo ceil(3.2); // ထုတ်လုပ်ခြင်း 4
echo ceil(7.0); // ထုတ်လုပ်ခြင်း 7
?>
ပုံမှန်အခြေအနေများတွင်ဤလုပ်ဆောင်မှုသည်ရိုးရှင်းပြီးထိုးထွင်းသိမြင်ရန်လိုသည်။
အချို့ဖြစ်ရပ်များတွင် ceil () function သည်ပုံမှန်မဟုတ်သောရလဒ်များရှိလိမ့်မည်။
<?php
$num = 1.9999999999999998;
echo ceil($num); // 结果ထုတ်လုပ်ခြင်း 2,မျှော်လင့်ချက်များနှင့်တွေ့ဆုံရန်
$num = 1.9999999999999996;
echo ceil($num); // 结果ထုတ်လုပ်ခြင်း 1,မမျှော်လင့်ဘဲ
?>
အဘယ်ကြောင့်အဆုံးစွန်သော 2 အစား 1 ၏ရလဒ်ရှိသနည်း တကယ်တော့ဒါက floating point နံပါတ်များကိုတိကျမှန်ကန်မှုကန့်သတ်ချက်ကြောင့်ဖြစ်သည်။
PHP ရှိ Floating Points သည် IEEE 754 စံအပေါ် အခြေခံ. နှစ်ဆတိကျသောရေပေါ်အမှတ်နံပါတ်များဖြစ်သည်။ ဤကိုယ်စားပြုမှုတွင်၎င်း၏မွေးရာပါတိကျမှန်ကန်မှုကိုကန့်သတ်ချက်များရှိသည်။ ဥပမာအားဖြင့်:
<?php
var_dump(0.1 + 0.2);
// ထုတ်လုပ်ခြင်း float(0.30000000000000004)
?>
သင်္ချာစစ်ဆင်ရေးများပြုလုပ်ရာတွင်ဤသေးငယ်သောအမှားများစုဆောင်းခြင်းသည် CEil () သည်ကျွန်ုပ်တို့မျှော်လင့်ထားသည့်အတိုင်းအနည်းငယ်သေးငယ်သည်သို့မဟုတ်အနည်းငယ်ပိုကြီးသည်။
အောက်ပါဥပမာကိုသုံးသပ်ကြည့်ပါ -
<?php
$num = 2.0000000000000004;
echo ceil($num); // ထုတ်လုပ်ခြင်း 3
$num2 = 1.9999999999999996;
echo ceil($num2); // ထုတ်လုပ်ခြင်း 2,ဒါပေမယ့်အမှန်တကယ်မျှော်လင့်ချက်ဖြစ်ပါတယ် 2
?>
Num2 သည် 2 ထက်နည်းသောကြောင့်၎င်းကိုရေပေါ်အမှတ်အသားပြုမှုကြောင့်နံပါတ် 2 ထက် ငယ်သောနံပါတ်များအဖြစ်သိုလှောင်ထားသည် ။
ဤအမှားအမျိုးအစားသည်ငွေကြေးတွက်ချက်မှုများ, တိုင်းတာခြင်းပြောင်းလဲခြင်းနှင့်အခြားအခြေအနေများတွင်ကြီးမားသောပြ problems နာများဖြစ်စေနိုင်သည်။
ဒ decimal မနေရာအရေအတွက်ကိုကန့်သတ်ရန်သင်ပထမ ဦး ဆုံး အနေဖြင့် () function ကို ဦး စွာသုံးနိုင်သည်။
<?php
$num = 1.9999999999999996;
$num = round($num, 8); // ချန်လှပ်ထား8ဒ decimal မကိန်း
echo ceil($num); // 结果ထုတ်လုပ်ခြင်း 2,မျှော်လင့်ချက်များနှင့်တွေ့ဆုံရန်
?>
ဤနည်းလမ်းသည် floating point အမှားများ၏သက်ရောက်မှုကိုထိရောက်စွာလျော့နည်းစေသည်။
တိကျမှန်ကန်မှုလိုအပ်ချက်များသည်အလွန်မြင့်မားပါက PHP ၏ BCMATT Function ကိုသုံးနိုင်သည်။
<?php
$num = "1.9999999999999996";
$result = bcadd($num, '0', 0); // ချန်လှပ်ထား0ဒ decimal မကိန်း,၎င်းသည်အောက်သို့ 0 င်ရောက်ခြင်းနှင့်ညီသည်
if (bccomp($num, $result, 10) > 0) {
$result = bcadd($result, '1', 0);
}
echo $result; // ထုတ်လုပ်ခြင်း 2
?>
BCMATT သည်နံပါတ်များကိုကိုယ်စားပြုရန်ကြိုးများကို အသုံးပြု. ရေပေါ်အမှတ်အမှားများကိုရှောင်ရှားရန်ကြိုးများကိုအသုံးပြုသည်။
ကိန်းဂဏန်းအကွာအဝေးကိုခွင့်ပြုသည့်အခါနံပါတ်ကိုသင်ပထမ ဦး ဆုံးချဲ့နိုင်သည်။
<?php
$num = 1.9999999999999996;
$scale = 8;
$num_scaled = (int)($num * pow(10, $scale));
$num_ceil = ceil($num_scaled / pow(10, $scale));
echo $num_ceil; // ထုတ်လုပ်ခြင်း 2
?>
ဤနည်းလမ်းသည် floating point တိကျမှန်ကန်မှုအမှားပြ the နာကိုလည်းသက်သာစေနိုင်သည်။
PHP ရှိ Floating Point နံပါတ်များသည်အခြေခံကျသော Binary ကိုယ်စားပြုမှုကြောင့်တိကျမှန်ကန်မှုအမှားများရှိသည်။
ceil () function ကိုယ်နှိုက်ကအမှားအယွင်းများမလုပ်နိုင်ကြပေမယ့်အမှားက input parameter ကိုမျှော်လင့်ချက်ဖြစ်စေသည်။
ပြ problems နာများကိုထိရောက်စွာရှောင်ရှားရန် ပတ် 0 န်းကျင် () , bcmath extension သို့မဟုတ်ချဲ့သောနည်းစနစ်များကိုအသုံးပြုပါ။
Floating Point နံပါတ်များကိုနားလည်ခြင်းနှင့်သင့်လျော်သောအစီအမံများယူခြင်းသည် FIL Projects တွင်တိကျမှန်ကန်ပြီးယုံကြည်စိတ်ချရသောအခန်းကဏ် play မှသာပြုလုပ်နိုင်သည်။