2010-10-21 21 views
26

Scala.Long içeren biçimlendirilmiş bir dize yazdırmam gerekiyor. java.lang.String.format() scala.Long (derleme süresi) ve RichLong (java.util.IllegalFormatConversionException) ile uyumsuzScala dizeleri nasıl biçimlendirilir?

Derleyici aşağıdaki çalışma kodu Tamsayı bırakılacağı konusunda uyarır

:

val number:Long = 3243 
String.format("%d", new java.lang.Long(number)) 

Fomatter, veri türü veya başka bir şey değiştirmeliyim mi? Eğer/ihtiyaç statik sınıf yöntemi istemiyoruz bu yüzden, doğrudan örneklerini dizesinin üzerine

val number: Long = 3243 
"%d".format(number) 
+0

Uzun zamandır bir Tamsayıya dönüştürdüğünüz bir yazım hatası mı? –

cevap

40

Sen gibi bir şey deneyebilirsiniz. Ayrıca, long temel öğeyi el ile kutlamanız gerekmez, derleyicinin sizin için her şeye dikkat etmesine izin verin! Bruno'nun cevabı çoğu durumda kullanmanız gereken budur @

String.format("%d", new java.lang.Integer(number)) 

nedenle daha iyi

"%d".format(number) 
+9

Ayrıca açıklamanın değeri de var ** neden ** bunun olması gerektiği. Bu durumda –

+0

'.format ', dize değişmezinden dolaylı olarak oluşturulan StringLike yöntemidir. – expert

20

Scala biçim yöntemi var:

7

olarak yazılır.

Biçimlendirmesini yapmak için bir Java yöntemini kullanmanız gerekiyorsa

, Java için güzel Long kutu olacak
String.format("%d",number.asInstanceOf[AnyRef]) 

kullanın.

+0

Bu çalışır. Bunun neden RichLong yaklaşımımda olduğu gibi bir çalışma zamanı hatasına neden olmayacağını biliyor musunuz? – Basilevs

+2

'RichLong', Java’ya göre, sadece bazı rasgele sınıflardır. Java, "% d" 'ye karşılık gelen bir kutulu ilkel tamsayı görmeyi bekler. Tabii ki Java, bir RichLong aldığında uygun hale geliyor. 'AsInstanceOf [AnyRef]' '' java.lang' sınıfına tercihen 'Rich' sınıfına girmez. –

İlgili konular