လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> formoating point နံပါတ်များကို format လုပ်ရန် Printf ကိုအသုံးပြုသောအခါကျွန်ုပ်၌တိကျမှန်ကန်သောပြ problems နာများရှိပါကကျွန်ုပ်ဘာလုပ်သင့်သနည်း။

formoating point နံပါတ်များကို format လုပ်ရန် Printf ကိုအသုံးပြုသောအခါကျွန်ုပ်၌တိကျမှန်ကန်သောပြ problems နာများရှိပါကကျွန်ုပ်ဘာလုပ်သင့်သနည်း။

gitbox 2025-05-13

Sprintf function ကိုသုံးပြီး floating point နံပါတ်များကို flatating လုပ်သည့်အခါသင်တိကျသောပြ issues နာများကိုသင်ကြုံတွေ့ရနိုင်သည်။ floating-point နံပါတ်များကိုတိတိကျကျမဖော်ပြနိုင်သည့်အခါဤပြ problems နာများသည်များသောအား ဖြင့် ဖြစ်လေ့ရှိသည်။ ဤဆောင်းပါးသည်အဘယ်ကြောင့်ဤပြ problem နာဖြစ်ပေါ်ရကြောင်းနှင့်မည်သို့ဖြေရှင်းရမည်ကိုဤဆောင်းပါးသည်လေ့လာပါမည်။

ဘာကြောင့်တိကျမှန်ကန်မှုပြ problems နာတွေရှိတာလဲ။

PHP ရှိ Floating Point နံပါတ်များကို IEEE 754 စံကို အသုံးပြု. Binary floating point နံပါတ်ကိုယ်စားပြုမှုဖြစ်သည်။ ဤစံသည်များစွာသောကိန်းဂဏန်းတန်ဖိုးများကိုကိုယ်စားပြုနိုင်သော်လည်းအချို့သောဒ decimal မ decimal မကိန်းနံပါတ်များ (0.1 ကဲ့သို့သော) နံပါတ်များကို binary numbers များအဖြစ်တိကျစွာကိုယ်စားမပြုနိုင်ပါ။ ထို့ကြောင့်ဤရေပေါ်အမှတ်နံပါတ်များကိုတွက်ချက်ခြင်းသို့မဟုတ် format လုပ်သည့်အခါအမှားများဖြစ်ပေါ်လာနိုင်သည်။

ဥပမာအားဖြင့်, floating point နံပါတ် 0.1 ကို binary တွင်တိကျစွာထုတ်ဖော်ပြောဆိုနိုင်ပြီး၎င်း၏အနီးစပ်ဆုံးအချက်များမှာသိုလှောင်ထားသည့်အခါအနည်းငယ်အမှားအယွင်းများရှိလိမ့်မည်။ အထူးသဖြင့် Sprintf နှင့်အတူ format ချသောအခါဤအမှားသည်ပိုမိုထင်ရှားလာလိမ့်မည်။

ဥပမာတစ်ခုပေးပါ

 <?php
$number = 0.1 + 0.2;
echo sprintf("%.1f", $number);
?>

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

တိကျမှန်ကန်မှုပြ problem နာကိုဘယ်လိုဖြေရှင်းရမလဲ။

Sprintf ကို အသုံးပြုသောအခါတိကျမှန်ကန်မှုပြ problems နာများကိုရှောင်ရှားနိုင်ရန်အတွက်အောက်ပါနည်းလမ်းများကိုရယူနိုင်ပါသည်။

1 ။ ပတ်ပတ်လည် function ကိုသုံးပါ

အလွယ်ကူဆုံးဖြေရှင်းနည်းမှာ Floating Point နံပါတ်များ၏တိကျမှန်ကန်မှုကိုထိန်းချုပ်ရန် ပတ် 0 န်းကျင် function ကိုအသုံးပြုရန်ဖြစ်သည်။ ပတ်ပတ်လည် function ကိုဒ decimal မအချက်အပြီးဂဏန်းအရေအတွက်ကိုသတ်မှတ်နိုင်သည်။

 <?php
$number = 0.1 + 0.2;
echo sprintf("%.1f", round($number, 1));
?>

ဤဥပမာတွင် အဝိုင်း ($ နံပါတ် 1) သည် ဒ decimal မအချက်အပြီး floating point နံပါတ်ကိုတစ် ဦး သို့လှည့်ပတ်နေပြီး Sprintf output ကိုတိကျသောရလဒ်ကိုရရှိစေသည်။

2 ။ နံပါတ် _format function ကိုသုံးပါ

Nume_Format function သည်နံပါတ်များကို format လုပ်ရန်အခြားနည်းလမ်းတစ်ခုဖြစ်သည်။ ၎င်းသည်ဒ decimal မနေရာအရေအတွက်ကိုသတ်မှတ်ရုံသာမကဘဲတစ်ထောင် delimiter ကဲ့သို့သောပြ problems နာများကိုလည်းကိုင်တွယ်သည်။ Nume_Format ကိုအသုံးပြုခြင်းသည် floating တိကျမှန်ကန်မှုပြ issues နာများကိုရှောင်ရှားနိုင်သည်။

 <?php
$number = 0.1 + 0.2;
echo number_format($number, 1);
?>

ဤဥပမာသည် flatatted floating point နံပါတ်ကိုတိုက်ရိုက်ထုတ်လွှင့်ပြီး Sprintf ၏တိကျမှန်ကန်မှုကိုရှောင်ရှားလိမ့်မည်။

3 ။ floating point နံပါတ်များ၏တိကျမှန်ကန်မှုကိုထိန်းချုပ်ပါ

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

 <?php
$number = bcadd("0.1", "0.2", 1);
echo sprintf("%.1f", $number);
?>

BCADD ကို အသုံးပြုခြင်းသည်သင့်အားရလဒ်အတိအကျရရန်သေချာသည်။

အကျဉ်းချုပ်

PHP တွင် floating-point နံပါတ်များကို formating-point နံပါတ်များကို formating လုပ်ရန် PHPINTF ကိုသုံးပြီး PHPINTF ကို အသုံးပြု. PHPTF ကို အသုံးပြု. PHPTF ကို အသုံးပြု. PHP တွင်အသုံးပြုသောအခါပေါ်ပေါက်လာသည်။ ဤပြ problem နာကိုဖြေရှင်းရန်သင်သည် ပတ် 0 န်းကျင် function, နံပါတ် ( decadd ကဲ့သို့သောမြင့်မားသောဂဏန်းတွက်ချက်မှု function ကိုသုံးနိုင်သည်။ ဤနည်းလမ်းများသည်တိကျမှန်ကန်မှုအမှားများကြောင့်တိကျသောရလဒ်များကိုရှောင်ရှားရန်နှင့် output floatput နံပါတ်များကိုမျှော်လင့်ချက်များနှင့်အညီမှန်ကန်ကြောင်းသေချာစေရန်ကူညီနိုင်သည်။