လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP ၏ Cebil () function သည်အဘယ်ကြောင့်မှားယွင်းသောရလဒ်ရှိသနည်း။ ရေပေါ်အမှတ်အမှားကြောင့်ဖြစ်ရတဲ့တွင်းများနှင့်ဖြေရှင်းနည်းများ

PHP ၏ Cebil () function သည်အဘယ်ကြောင့်မှားယွင်းသောရလဒ်ရှိသနည်း။ ရေပေါ်အမှတ်အမှားကြောင့်ဖြစ်ရတဲ့တွင်းများနှင့်ဖြေရှင်းနည်းများ

M66 2025-06-12

PHP Development တွင် CEIL () function ကိုမကြာခဏတက်လေ့ရှိပြီးတစ်ခါတစ်ရံတွင်ကျွန်ုပ်တို့မျှော်လင့်ထားသည့်ရလဒ်များသည်ကျွန်ုပ်တို့မျှော်လင့်ထားသည့်ကိန်းဂဏန်းများမဟုတ်ကြောင်းတွေ့ရှိရသည်။ စင်စစ်အားဖြင့်ဤအခြေအနေ၏အခြေခံအကြောင်းရင်းမှာ floating အမှတ်နံပါတ်များ၏ကိုယ်စားပြုမှုနှင့်စစ်ဆင်ရေးအမှားဖြစ်သည်။ ဤဆောင်းပါးသည်ဤပြ problem နာ၏အကြောင်းရင်းများကိုအသေးစိတ်လေ့လာပြီးထိရောက်သောဖြေရှင်းနည်းများပေးလိမ့်မည်။


1 ။ ceil () function ကို၏အခြေခံအသုံးပြုမှု

CEILI () function ၏ function သည် နံပါတ်တစ်ခုကိုလှည့်ပတ် ။ အသေးငယ်ဆုံးကိန်းကိုပြန်ပို့ရန်ဖြစ်သည်။ ဥပမာအားဖြင့်:

 <?php
echo ceil(3.2); // ထုတ်လုပ်ခြင်း 4
echo ceil(7.0); // ထုတ်လုပ်ခြင်း 7
?>

ပုံမှန်အခြေအနေများတွင်ဤလုပ်ဆောင်မှုသည်ရိုးရှင်းပြီးထိုးထွင်းသိမြင်ရန်လိုသည်။


2 ။ ပြ problem နာဖြစ်စဉ်: CEilil () အမှားအယွင်းသည်အဘယ်ကြောင့်မှားသနည်း။

အချို့ဖြစ်ရပ်များတွင် ceil () function သည်ပုံမှန်မဟုတ်သောရလဒ်များရှိလိမ့်မည်။

 <?php
$num = 1.9999999999999998;
echo ceil($num); // 结果ထုတ်လုပ်ခြင်း 2,မျှော်လင့်ချက်များနှင့်တွေ့ဆုံရန်

$num = 1.9999999999999996;
echo ceil($num); // 结果ထုတ်လုပ်ခြင်း 1,မမျှော်လင့်ဘဲ
?>

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


3 ။ floating point အမှားတစ်ခု root အကြောင်းရင်း

PHP ရှိ Floating Points သည် IEEE 754 စံအပေါ် အခြေခံ. နှစ်ဆတိကျသောရေပေါ်အမှတ်နံပါတ်များဖြစ်သည်။ ဤကိုယ်စားပြုမှုတွင်၎င်း၏မွေးရာပါတိကျမှန်ကန်မှုကိုကန့်သတ်ချက်များရှိသည်။ ဥပမာအားဖြင့်:

 <?php
var_dump(0.1 + 0.2);
// ထုတ်လုပ်ခြင်း float(0.30000000000000004)
?>

သင်္ချာစစ်ဆင်ရေးများပြုလုပ်ရာတွင်ဤသေးငယ်သောအမှားများစုဆောင်းခြင်းသည် CEil () သည်ကျွန်ုပ်တို့မျှော်လင့်ထားသည့်အတိုင်းအနည်းငယ်သေးငယ်သည်သို့မဟုတ်အနည်းငယ်ပိုကြီးသည်။


4 ။ ဥပမာ floating point အမှားကြောင့်ဖြစ်ရတဲ့တွင်းကိုဥပမာပြသ

အောက်ပါဥပမာကိုသုံးသပ်ကြည့်ပါ -

 <?php
$num = 2.0000000000000004;
echo ceil($num); // ထုတ်လုပ်ခြင်း 3

$num2 = 1.9999999999999996;
echo ceil($num2); // ထုတ်လုပ်ခြင်း 2,ဒါပေမယ့်အမှန်တကယ်မျှော်လင့်ချက်ဖြစ်ပါတယ် 2
?>

Num2 သည် 2 ထက်နည်းသောကြောင့်၎င်းကိုရေပေါ်အမှတ်အသားပြုမှုကြောင့်နံပါတ် 2 ထက် ငယ်သောနံပါတ်များအဖြစ်သိုလှောင်ထားသည်

ဤအမှားအမျိုးအစားသည်ငွေကြေးတွက်ချက်မှုများ, တိုင်းတာခြင်းပြောင်းလဲခြင်းနှင့်အခြားအခြေအနေများတွင်ကြီးမားသောပြ problems နာများဖြစ်စေနိုင်သည်။


5 ။ ဖြေရှင်းနည်း

1 ။ ပထမ ဦး ဆုံး floating အမှတ်နံပါတ်ပတ်ပတ်လည်နှင့်ထို့နောက်ပတ်ပတ်လည်

ဒ decimal မနေရာအရေအတွက်ကိုကန့်သတ်ရန်သင်ပထမ ဦး ဆုံး အနေဖြင့် () function ကို ဦး စွာသုံးနိုင်သည်။

 <?php
$num = 1.9999999999999996;
$num = round($num, 8); // ချန်လှပ်ထား8ဒ decimal မကိန်း
echo ceil($num); // 结果ထုတ်လုပ်ခြင်း 2,မျှော်လင့်ချက်များနှင့်တွေ့ဆုံရန်
?>

ဤနည်းလမ်းသည် floating point အမှားများ၏သက်ရောက်မှုကိုထိရောက်စွာလျော့နည်းစေသည်။

2 ။ နံပါတ်များကို strings များသို့ပြောင်းရန်နှင့် BCMAtath extensions ကိုသုံးပါ

တိကျမှန်ကန်မှုလိုအပ်ချက်များသည်အလွန်မြင့်မားပါက 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 သည်နံပါတ်များကိုကိုယ်စားပြုရန်ကြိုးများကို အသုံးပြု. ရေပေါ်အမှတ်အမှားများကိုရှောင်ရှားရန်ကြိုးများကိုအသုံးပြုသည်။

3 ။ ချဲ့ရန် 10 ၏စွမ်းအားဖြင့်မြှောက်ပါ,

ကိန်းဂဏန်းအကွာအဝေးကိုခွင့်ပြုသည့်အခါနံပါတ်ကိုသင်ပထမ ဦး ဆုံးချဲ့နိုင်သည်။

 <?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 နာကိုလည်းသက်သာစေနိုင်သည်။


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

  • PHP ရှိ Floating Point နံပါတ်များသည်အခြေခံကျသော Binary ကိုယ်စားပြုမှုကြောင့်တိကျမှန်ကန်မှုအမှားများရှိသည်။

  • ceil () function ကိုယ်နှိုက်ကအမှားအယွင်းများမလုပ်နိုင်ကြပေမယ့်အမှားက input parameter ကိုမျှော်လင့်ချက်ဖြစ်စေသည်။

  • ပြ problems နာများကိုထိရောက်စွာရှောင်ရှားရန် ပတ် 0 န်းကျင် () , bcmath extension သို့မဟုတ်ချဲ့သောနည်းစနစ်များကိုအသုံးပြုပါ။

Floating Point နံပါတ်များကိုနားလည်ခြင်းနှင့်သင့်လျော်သောအစီအမံများယူခြင်းသည် FIL Projects တွင်တိကျမှန်ကန်ပြီးယုံကြည်စိတ်ချရသောအခန်းကဏ် play မှသာပြုလုပ်နိုင်သည်။