দুটি দশমিক স্থানে একটি সংখ্যা দেখান


568

একটি পিএইচপি স্ট্রিং দুটি দশমিক জায়গায় গোল করার সঠিক উপায় কি?

$number = "520"; // It's a string from a database

$formatted_number = round_to_2dp($number);

echo $formatted_number;

আউটপুট হওয়া উচিত 520.00;

round_to_2dp()ফাংশন সংজ্ঞা কিভাবে হওয়া উচিত ?


13
এটি সত্যই "বৃত্তাকার" নয়। বৃত্তাকার স্পষ্টতা হ্রাস । এটি এমন কোনও সংখ্যায় দশমিক স্থান যুক্ত করবে না যা তাদের নেই। অনেক উত্তর এবং মন্তব্যের ভিত্তিতে দেখে মনে হচ্ছে যে লোকেদের মনে হয় যে গোলাকার এমন কিছু যা তা নয়। roundএটি একটি গণিত ফাংশন, এবং এটি কেবল একটি ফর্ম্যাট সমস্যা।
হবেন না

উত্তর:


1129

আপনি নাম_ফর্ম্যাট () ব্যবহার করতে পারেন :

return number_format((float)$number, 2, '.', '');

উদাহরণ:

$foo = "105";
echo number_format((float)$foo, 2, '.', '');  // Outputs -> 105.00

এই ফাংশনটি একটি স্ট্রিং প্রদান করে


4
বৃত্তাকার () খুব এটা পাঠযোগ্যতা এবং সরলীকরণের জন্য ভালো হতে পারে, কিন্তু কিছু সমালোচনামূলক জন্য সচেতন হতে হবে যে এটা বগী হতে বলে জানা গেছে
StringsOnFire

40
@ এলভারোজি.ভিকারিও roundএখানে ওপি'র সমস্যা সমাধান করে না। round("520", 2)ভাসাটি ফেরত দেয় 520এবং প্রতিধ্বনিত হয় যা অবশ্যই এটি 2 দশমিক স্থানে প্রদর্শিত হবে না। ওপির উদ্দেশ্যটির জন্য - পিছনে জিরো দিয়ে প্যাডিং করে 2 দশমিক স্থানে পূর্ণসংখ্যা দেখানো - আপনার একটি গোলাকার ফাংশন নয়, একটি সংখ্যার ফর্ম্যাটিং ফাংশন প্রয়োজন।
মার্ক অ্যামেরি

3
অন্যান্য সমস্ত উত্তর ডট নোটেশন সহ দশমিক মানগুলিতে সীমাবদ্ধ। 520,00পরিবর্তে যখন আপনার দরকার হবে তখন 520.00এটি সহজভাবে কাজ করে।
এসপিআরবিএনএন

1
আপনি যদি কেবল ভাসা সীমাবদ্ধ করতে চান তবে অন্তর্নির্মিত না হয়ে বিসিডিভ ($ সংখ্যা, 1,2)
ওয়াসিম এ

2
আমি মনে করি আপনার বিসিএডিডি ব্যবহার করা উচিত (0, $ আপনার সংখ্যা, 2) এটি আপনাকে নিখুঁত ফলাফল দেবে।
jewelhuq

213

ব্যবহার করুন round()(আপনি যদি কেবলমাত্র ভাসা বিন্যাসে একটি সংখ্যা আশা করে থাকেন তবে ব্যবহার করুন , অন্যথায় কোডমওয়ানসি প্রদত্ত একটি উত্তর হিসাবে নাম_ফর্ম্যাট () ব্যবহার করুন ):

echo round(520.34345, 2);   // 520.34
echo round(520.3, 2);       // 520.3
echo round(520, 2);         // 520

ম্যানুয়াল থেকে:

বর্ণনা:

float round(float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]]);

valনির্দিষ্ট precision(এর দশমিক বিন্দুর পরে অঙ্কের সংখ্যা) এর বৃত্তাকার মান প্রদান করে । precisionnegativeণাত্মক বা শূন্য (ডিফল্ট )ও হতে পারে।

...

উদাহরণ # 1 round()উদাহরণ

<?php
    echo round(3.4);         // 3
    echo round(3.5);         // 4
    echo round(3.6);         // 4
    echo round(3.6, 0);      // 4
    echo round(1.95583, 2);  // 1.96
    echo round(1241757, -3); // 1242000
    echo round(5.045, 2);    // 5.05
    echo round(5.055, 2);    // 5.06
?>

উদাহরণ # 2 মোড উদাহরণ

<?php
    echo round(9.5, 0, PHP_ROUND_HALF_UP);   // 10
    echo round(9.5, 0, PHP_ROUND_HALF_DOWN); // 9
    echo round(9.5, 0, PHP_ROUND_HALF_EVEN); // 10
    echo round(9.5, 0, PHP_ROUND_HALF_ODD);  // 9

    echo round(8.5, 0, PHP_ROUND_HALF_UP);   // 9
    echo round(8.5, 0, PHP_ROUND_HALF_DOWN); // 8
    echo round(8.5, 0, PHP_ROUND_HALF_EVEN); // 8
    echo round(8.5, 0, PHP_ROUND_HALF_ODD);  // 9
?>

5
@ Khuderm round($number, 2);কাজ করে না। আমি 520.00 520 না চাই round বিশ্বাস করতে পারি না গোলটি ডিফল্টরূপে এটি করে না।
ক্লাদিউ ক্রিঙ্গা

2
এটি এমনকি ওপিকে সঠিকভাবে উত্তর দেয় না তবে এতে 100 টিরও বেশি ভোট রয়েছে!
রব সেডগউইক

200

অন্যথা,

$padded = sprintf('%0.2f', $unpadded); // 520 -> 520.00

3
তাহলে আপনি যদি চান 520,00? আমার ধারণা অন্যান্য উত্তরটি সে ক্ষেত্রে আরও ভাল কাজ করে।
এসপিআরবিএনএন

2
^ অন্য কোন উত্তর কোন int জন্য দুই দশমিক স্থান দেবে না
pythonian29033

1
অন্যান্য কারণগুলির জন্য আপনি এটি চাওয়াতে পারেন আপনি রাউন্ডিং চান না ... বা আমার কারণে এসকিউএল ফ্লোটগুলি ফিরে আসার সাথে পিএইচপি গণিত বাগ হিসাবে সাধারণ ফ্লোটের মতো দেখা হয় না
Amb3rL4nn

34

http://php.net/manual/en/function.round.php

যেমন

echo round(5.045, 2);    // 5.05

echo round(5.055, 2);    // 5.06

রাউন্ড সমৃদ্ধ যে সঠিক কার্যকারিতাটি চাইছে তা করবে, তবে সংখ্যা_ ফর্ম্যাট () সমস্ত ধরণের সংখ্যাসূচক বিন্যাসে সন্ধান করা আরও আকর্ষণীয় হবে।
শামীম হাফিজ

এই পদ্ধতিটি শেষের দিকে ".00" অঙ্কগুলিকে বাধ্য করার সাথে সাথে রাউন্ডিংও সম্পাদন করবে।
SystemX17

10
আমি চেষ্টা করেছি, কিন্তু এটি কাজ করে না - এটি অতিরিক্ত .00 যোগ করবে না।
ধনী ব্র্যাডশো

আমার কাছে যে উদাহরণ রয়েছে তার একটি ব্যবহার করার চেষ্টা করুন, এটি নিজেই পিএইচপি স্ক্রিপ্টে রয়েছে। আপনার মন্তব্য ফলাফল পাওয়া উচিত। তা না হলে আপনার কোথাও কোথাও আপনার পিএইচপি সেটআপ নিয়ে সমস্যা আছে।
সিস্টেমএক্স 17

1
রাউন্ড (520, 2) @ রিচ দ্বারা প্রয়োজনীয় হিসাবে 520 নয় 520 ফেরত
ব্যবহারকারী 761100

25

চেষ্টা করুন:

$number = 1234545454; 
echo  $english_format_number = number_format($number, 2); 

আউটপুটটি হবে:

1,234,545,454.00

2
এটি কাজ করে, তবে আউটপুট একটি স্ট্রিং হবে এবং একটি সংখ্যা নয়।
ইথান

1
আপনি যদি নাম_ফর্ম্যাটটি ব্যবহার করতে চান তবে কমপক্ষে এটি নাম্বার ফর্ম্যাট করুন ($ সংখ্যা, 2, '।', '')
মিহাই পি

14

আপনি পিএইচপি printfবা sprintfফাংশন ব্যবহার করতে পারেন :

এর সাথে উদাহরণ sprintf:

$num = 2.12;
echo sprintf("%.3f", $num);

আপনি echoপাশাপাশি চালাতে পারেন । উদাহরণ:sprintf("%.3f", $num);

আউটপুট:

2.120

বিকল্পভাবে, এর সাথে printf:

echo printf("%.2f", $num);

আউটপুট:

2.124

12

এই সমস্যাটি সমাধান করার জন্য আরও একটি বহিরাগত উপায় bcadd()হ'ল $ ডান_প্রের্যান্ডের জন্য একটি ডামি মান সহ ব্যবহার করা 0

$formatted_number = bcadd($number, 0, 2);

2
মনে রাখবেন যে bc*ফাংশনগুলি গোলাকার হয় না, তারা সর্বদা গোল হয়ে যায়। উদাহরণস্বরূপ, bcadd("1.0999","0.0",1)"১.১" নয়, "১.০" ফলন হয়েছে।
কলিনম

1
বিসি ম্যাথ ফাংশনগুলি আসলে $scaleভগ্নাংশের অঙ্কগুলিতে প্রক্রিয়াজাতকরণ বন্ধ করে দেয় । এটি শূন্যের দিকে গোলাকার সমান।
আলী



7

round_to_2dp একটি ব্যবহারকারী-সংজ্ঞায়িত ফাংশন, এবং আপনি যদি এই ফাংশনটির ঘোষণা পোস্ট না করেন তবে কিছুই করা যায় না।

তবে আমার অনুমান এটি করছে: number_format($number, 2);


14
আপনার প্রথম অনুচ্ছেদ থেকে, আমি মনে করি আপনি প্রশ্নটি ভুল বুঝেছেন। round_to_2dp($number);সিউডোকোড হিসাবে বোঝানো হয়েছিল; ওপি কারও কাছে অনুরোধ জানিয়েছিল যে তাকে কীভাবে সেই অভিব্যক্তিটি প্রতিস্থাপন করতে হবে tell
মার্ক আমেরিকা

7
bcdiv($number, 1, 2) // 2 varies for digits after the decimal point

এটি দশমিক বিন্দুর পরে ঠিক দুটি অঙ্ক প্রদর্শন করবে।

সুবিধা:

যদি আপনি কেবলমাত্র ভাসমান মানের পরে এবং না শুধুমাত্র আন্তর জন্য দুটি অঙ্ক প্রদর্শন করতে চান তবে এটি ব্যবহার করুন।


আপনার কাছে বিসিডিআইভি থাকলে এটি সর্বাধিক সর্বজনীন সমাধান (এটি স্টক তবে সেন্টো 6 এ অ-ডিফল্ট প্যাকেজ)।
শোভাস

6
$twoDecNum = sprintf('%0.2f', round($number, 2));

রাউন্ডিংটি সঠিকভাবে সংখ্যার বৃত্তাকার করে দেয় এবং স্প্রিন্টফ এটি গোল করে পরে যদি কেবল 1 দশমিক স্থান হয় তবে এটি 2 টি দশমিক স্থানে নিয়ে যায়।


6
$retailPrice = 5.989;
echo number_format(floor($retailPrice*100)/100,2, '.', ''); 

এটি সংখ্যাটি গোল না করে 5.98 এ ফিরে আসবে।


কেবলমাত্র এটি কাজটি floor($retailPrice * 100) / 100;তখন সংখ্যার বিন্যাসের প্রয়োজন হয় না।
somsgod

6

শর্তসাপেক্ষে বৃত্তাকার বন্ধ জন্য। দশমিক যেখানে এটি সত্যিই প্রয়োজন অন্যথায় পুরো সংখ্যা প্রদর্শন করুন

123.56 => 12.56

123.00 => 123

$somenumber = 123.56;

$somenumber = round($somenumber,2);

if($somenumber == intval($somenumber))
{
    $somenumber = intval($somenumber);
}

echo $somenumber; // 123.56


$somenumber = 123.00;

$somenumber = round($somenumber,2);

if($somenumber == intval($somenumber))
{
    $somenumber = intval($somenumber);
}

echo $somenumber; // 123    

6

আমি আমার নিজের।

$decimals = 2;
$number = 221.12345;
$number = $number * pow(10, $decimals);
$number = intval($number);
$number = $number / pow(10, $decimals);

1
এটি করার জন্য কিছু গণিতটি দেখে ভাল লাগল। যদিও বিল্ট ইন ফাংশনটি আমার পক্ষে পছন্দ করা বেশি। চাকাটি পুনরায় উদ্ভাবনের কোনও কারণ নেই।
লাইটবুলব 1

1
দুঃখিত, তবে রাউন্ড (), যেমনটি বলা হয়েছে, রাউন্ড ডি নম্বর এবং কখনও কখনও, আমি গোল করতে চাই না।
joanlgr

5

এখানে আমি .একটি ফাংশন ব্যবহার করে (ডট) পরে দুটি দশমিক পেয়েছি ...

function truncate_number($number, $precision = 2) {

    // Zero causes issues, and no need to truncate
    if (0 == (int)$number) {
        return $number;
    }

    // Are we negative?
    $negative = $number / abs($number);

    // Cast the number to a positive to solve rounding
    $number = abs($number);

    // Calculate precision number for dividing / multiplying
    $precision = pow(10, $precision);

    // Run the math, re-applying the negative value to ensure
    // returns correctly negative / positive
    return floor( $number * $precision ) / $precision * $negative;
}

উপরের ফাংশন থেকে ফলাফল:

echo truncate_number(2.56789, 1); // 2.5
echo truncate_number(2.56789);    // 2.56
echo truncate_number(2.56789, 3); // 2.567

echo truncate_number(-2.56789, 1); // -2.5
echo truncate_number(-2.56789);    // -2.56
echo truncate_number(-2.56789, 3); // -2.567

নতুন সঠিক উত্তর

পিএইচপি নেটিভ ফাংশন বিসিডিআইভ ব্যবহার করুন

echo bcdiv(2.56789, 1, 1);  // 2.5
echo bcdiv(2.56789, 1, 2);  // 2.56
echo bcdiv(2.56789, 1, 3);  // 2.567
echo bcdiv(-2.56789, 1, 1); // -2.5
echo bcdiv(-2.56789, 1, 2); // -2.56
echo bcdiv(-2.56789, 1, 3); // -2.567

4
$number = sprintf('%0.2f', $numbers); // 520.89898989 -> 520.89

এটি আপনাকে দশমিকের পরে 2 নম্বর দেবে।


4
না এটা হবে না। আমি জানি না কখন এই পোস্টটি লেখা হয়েছিল তবে আপনি যদি নিজের উদাহরণ দিয়ে এটি চেষ্টা করেন তবে কমপক্ষে আমার মেশিনে :-), এটি আউটপুট 520.90। অর্থ, রাউন্ডিং ডাবল উইল আসবে। সাবধান হও!
বোয়াজ রিমল্যান্ড 13'35

4

আপনি যদি আপনার পুরো প্রকল্পে দুটি দশমিক সংখ্যা ব্যবহার করতে চান তবে আপনি সংজ্ঞা দিতে পারেন:

bcscale(2);

তারপরে নীচের ফাংশনটি আপনার পছন্দসই ফলাফল আনবে:

$myvalue = 10.165445;
echo bcadd(0, $myvalue);
// result=10.11

তবে আপনি যদি বিসস্কেল ফাংশনটি ব্যবহার না করেন তবে আপনার কাঙ্ক্ষিত ফলাফল পেতে আপনাকে কোডটি নিম্নরূপে লিখতে হবে।

$myvalue = 10.165445;
echo bcadd(0, $myvalue, 2);
// result=10.11

অধিক জানার জন্য




0

অন্যান্য উত্তরগুলিতে যুক্ত করা, যেহেতু সংখ্যা_ ফর্ম্যাট (), ডিফল্টরূপে হাজার হাজার বিভাজক যুক্ত করে।

এটি অপসারণ করতে, এটি করুন:

$number = number_format($number, 2, ".", "");

0
  • দশমিকের সংখ্যা চয়ন করুন
  • ফর্ম্যাট কমা (,)
  • ট্রেলিং জিরোগুলি ছাঁটাই করার একটি বিকল্প

শেষবারের মতো!

function format_number($number,$dec=0,$trim=false){
  if($trim){
    $parts = explode(".",(round($number,$dec) * 1));
    $dec = isset($parts[1]) ? strlen($parts[1]) : 0;
  }
  $formatted = number_format($number,$dec); 
  return $formatted;
}

উদাহরণ

echo format_number(1234.5,2,true); //returns 1,234.5
echo format_number(1234.5,2);      //returns 1,234.50
echo format_number(1234.5);        //returns 1,235

-5

আপনি পিএইচপি রাউন্ড () ফাংশন ব্যবহার করতে পারেন ।

echo round(3.4);         // 3
echo round(3.5);         // 4
echo round(3.6);         // 4
echo round(3.6, 0);      // 4
echo round(1.95583, 2);  // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2);    // 5.05
echo round(5.055, 2);    // 5.06

3
-1; এই উত্তরটি নতুন কিছু যোগ করে না যে সোমনাথ মুলুকের জবাবটি 2 বছর আগে ইতিমধ্যে নেই।
মার্ক আমেরিকা

1
এটিও ভুল, যেমন সোমনাথের উত্তর সম্পর্কে আমার মন্তব্যে উল্লিখিত হয়েছে।
মার্ক অ্যামেরি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.