قم بإظهار العلامة العشرية فقط إذا لم يكن مكون النقطة العائمة هو .00 sprintf/printf

StackOverflow https://stackoverflow.com/questions/838064

  •  10-07-2019
  •  | 
  •  

سؤال

أقوم بتنسيق رقم الفاصلة العائمة بشكل جيد ولكني أريد أن يظهر كعدد صحيح إذا لم يكن هناك رقم الفاصلة العائمة ذي الصلة.

أي.

  • 1.20 -> 1.2x
  • 1.78 -> 1.78x
  • 0.80 -> 0.8x
  • 2.00 -> 2x

يمكنني تحقيق ذلك من خلال القليل من التعبير العادي ولكن أتساءل عما إذا كان هناك sprintf-الطريقة الوحيدة للقيام بذلك؟

أنا أفعل ذلك بتكاسل إلى حد ما في روبي مثل هذا:

("%0.2fx" % (factor / 100.0)).gsub(/\.?0+x$/,'x')
هل كانت مفيدة؟

المحلول

تريد استخدامها %g بدلاً من %f:

"%gx" % (factor / 100.00)

نصائح أخرى

يمكنك المزج والمطابقة بين %g و%f كما يلي:

"%g" % ("%.2f" % number)

إذا كنت تستخدم Rails، فيمكنك استخدام أساليب NumberHelper الخاصة بـ Rails:http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html

number_with_precision(13.001, precision: 2, strip_insignificant_zeros: true)
# => 13
number_with_precision(13.005, precision: 2, strip_insignificant_zeros: true)
# => 13.01

كن حذرًا، لأن الدقة تعني جميع الأرقام بعد العلامة العشرية في هذه الحالة.

انتهى بي الأمر مع

price = price.round(precision)
price = price % 1 == 0 ? price.to_i : price.to_f

بهذه الطريقة يمكنك الحصول على أرقام بدلاً من السلاسل

لقد صادفت هذا للتو، ولم ينجح الإصلاح أعلاه، لكنني توصلت إلى هذا، وهو ما يناسبني:

def format_data(data_element)
    # if the number is an in, dont show trailing zeros
    if data_element.to_i == data_element
         return "%i" % data_element
    else
    # otherwise show 2 decimals
        return "%.2f" % data_element
    end
end

إليك طريقة أخرى:

decimal_precision = 2
"%.#{x.truncate.to_s.size + decimal_precision}g" % x

أو كبطانة واحدة لطيفة:

"%.#{x.truncate.to_s.size + 2}g" % x

سهل مع القضبان: http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#method-i-number_with_precision

number_with_precision(value, precision: 2, significant: false, strip_insignificant_zeros: true)

كنت أبحث عن وظيفة لاقتطاع (غير تقريبي) رقم عائم أو عشري في Ruby on Rails، وأكتشف الحل التالي للقيام بذلك:

يمكنكم يا رفاق تجربة وحدة التحكم الخاصة بكم، على سبيل المثال:

>> a=8.88
>> (Integer(a*10))*0.10
>> 8.8

آمل أن يساعد شخص ما.:-)

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