سؤال

أريد أن استخدام number_format وظيفة في php. علي سبيل المثال:

$number = 234.51;
echo number_format($number,2);

هذا يعمل لأرقام تعويم ولكن أريد استخدامه لأرقام مختلفة. إذا كان الرقم عشري وليس لديه أي نقاط عائمة، فهذا يظهر مثل: 145.00. كيف يمكنني اصلاح هذا؟ أعني أنني أريد أن أعرض أكبر عدد ممكن من النقاط العائمة، وليس أكثر.

هل كانت مفيدة؟

المحلول 2

أعتقد أنني لا أستطيع الحصول على ما أريده من number_format لذلك فعلت هذا ويعمل بشكل جيد:

 public function floatNumber($number)
 {
      $number_array = explode('.', $number);
      $left = $number_array[0];
      $right = $number_array[1];
      return number_format($number, strlen($right));
 }

thanx جميعا لردودك.

نصائح أخرى

التحقيق في printf و sprintf وظائف بدلا من number_format.

أنها تعطي القدرة على تنسيق الأرقام كما يحلو لك.

printf("%d", $int) 

سيكون مناسبا للعدد العشري.

printf("%4.2f", $float) 

سيكون مناسبا لعدد نقطة عائمة مع اثنين من الأماكن العشرية.

number_format يبدو أنه يهدف إلى تدويل إخراج العملة، لكنني لا أعتقد أن هذا ما تريده لأنك ذكرت أن الأرقام العشرية "كاملة".

لا أعرف طريقة أفضل للقيام بذلك، ولكن يمكنك مقارنة النوع، مثل الرمز أدناه:

$number = 234.159;
if(is_float($number)) {
 echo number_format($number, 2);
}else {
 echo $number;
}

في حين أنها سريعة بعض الشيء وقذرة، يمكنك ببساطة القيام ...

str_replace('.00', '', number_format($potentialFloat, 2));

بعيدا عن المثالي، ولكن فعال.

أعتقد أن المشكلة الرئيسية تحدد عدد المواقف المطلوبة. هل تحدد 13.01 ك 13 لأن الرقم العشري الأول كان 0؟ نظرا لأن تنسيق PrintF ورقم الأرقام يحتاج إلى معرفة عدد الكسور العشرية، لا أعرف ذلك من شأنه أن يعمل من أجلك.

ربما شيء مثل هذا (وهو الكثير من الوظائف، ولكن يبحث عن أول 0، ثم إرجاع السلسلة المقطوعة). نعم، إنه مكثف، لكن قد يكون أفضل طريقة لك.

وظيفة Show_Number (رقم $، $ MAX = 8) {IF (Streprox (رقم $، ")) {$ decimal = strpos ($ رقم"، ".)؛ إذا (strops ($ رقم، '.0')) {Return Serchtr ($ رقم، 0، $ عشري)؛ // إرجاع كله إذا كان الصفر أولا} آخر {if (STROS (STROST (STROSS (STROST (STROST (STROST (STRECT (STREST (STROST (STREST (NECTR (رقم $، $ عشري، $ MAX)، '0')) {$ Zero = strpos (substr ($ رقم، عشري، $ MAX)، '0')؛ عودة Substr // إرجاع رقم مع أقصى الأماكن}}} {إرجاع رقم $؛ // إرجاع رقم إذا لم يكن هناك عشرية}}
rtrim(number_format($number, 2), '0.');

يمكنني استخدام ما يلي للتخلص من الأصفار الزائدة:

// Trims a floating point number so there are no trailing zeros. For example:
// 1.00 -> 1
// 1.10 -> 1.1
function trimFloatingPoint($input) {
    $strNum = strval($input);

    while(substr($strNum, -1, 1) == '0')
        $strNum = substr($strNum, 0, strlen($strNum) -1);

    // Trailing zeros are gone. How about the trailing period?
    if(substr($strNum, -1, 1) == '.')
        $strNum = substr($strNum, 0, strlen($strNum) -1);

    return $strNum;
}
$x = $x - floor($x)

سوف أعطيك النقطة العائمة اليمنى ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top