Ruby on Rails: 10'un altındaysa bir sayının önüne sıfırları nasıl eklersiniz?


110

Tek basamaklı sayıları şu şekilde iki basamaklı sayılara dönüştürmek istiyorum:

9 ==> 09
5 ==> 05
12 == 12
4 ==> 04

Sanırım bir sürü if-else ifadesi koyabilirim (sayı 10'un altındaysa, bir gsub yapın) ama bunun korkunç bir kodlama olduğunu düşünüyorum. Rails'in number_with_precision olduğunu biliyorum, ancak bunun yalnızca ondalık sayılar için geçerli olduğunu görüyorum. Tek basamaklı sayıları iki basamaklı sayıya nasıl dönüştürebileceğiniz hakkında bir fikriniz var mı?

Yanıtlar:


142

Şunu mu demek istediniz sprintf '%02d', n?

irb(main):003:0> sprintf '%02d', 1
=> "01"
irb(main):004:0> sprintf '%02d', 10
=> "10"

İleride format tablosuna başvurmaksprintf isteyebilirsiniz , ancak bu belirli örnek için, en az 2 karakter ( ) alan '%02d'bir tamsayı d( 2) ve boşluklar ( 0) yerine sıfırlarla sol dolgu yazdırmak anlamına gelir .


Teşekkürler Mark !! Mükemmel =) Teşekkürler!
sjsc

Muhtemelen %02ibu durum için kullanmalısınız çünkü çıktının bir tamsayı olduğu ve olması gerektiği daha açıktır, d kullanmaya alışkın olmayan insanlar için daha az sezgiseldir sprintf.
SeanJA

'%02d'%1sprintf olmadan basitçe yapabilirsiniz
Qiushi Huang

194

Birçok insan kullanıyor sprintf(ki bu yapılacak doğru şey) ve bence bunu bir dizi için yapmak istiyorsanız rjustve ljustyöntemlerini aklınızda bulundurmanız en iyisidir :

"4".rjust(2, '0')

Bu, "4"en az 2karakter uzunluğunda olmasını sağlayarak ve onu doldurarak doğru olanı haklı çıkaracaktır '0'. ljusttersini yapar.


2
Bu sadece dizelere izin vermek istiyorsanız sprintf'den daha iyidir. Aksi takdirde, yanlışlıkla bir dizge kullanırsam bir istisna attığı için (olması gerektiği gibi) sprintf kullanırdım.
Velizar Hristov

Bir sayının dizgi temsiliyle başladığınızı biliyorsanız, bunu performans için sprintf'ten daha çok seviyorum. Kullanmak rjust, sprintf'in biçim dizesini ayrıştırma, bir dizeyi bir sayıya dönüştürme ve bu sayıyı bir dizeye geri dönüştürme maliyetini ortadan kaldırır. Artı, bir insanın kodun bir bakışta ne yapmaya çalıştığını anlaması (tartışmalı olarak) kolaydır.
David Hempy


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.