2011-08-04 83 views
5

Java'da, her zamanki sıfırlar yerine altçizgilerle nasıl kodlanır?Java'da sayılarla alt çizgi nasıl yazılır?

Ben

  • 123,45 123,45 ___ için format olabilir istediğiniz Örneğin

    ve

  • 12345,67 _12345.67
  • 0.12 ile formated edilecek için format olabilir için _ __ _ __ .12

Çok fazla şey denedim ve en yakın (SYMBOLS.setZeroDigit ('_') kullanarak;) şuydu:

import java.text.DecimalFormat; 
import java.text.DecimalFormatSymbols; 

public class Example { 

    public static void main(String[] args) { 
     DecimalFormatSymbols SYMBOLS = new DecimalFormatSymbols(); 
     SYMBOLS.setDecimalSeparator('.'); 
     SYMBOLS.setGroupingSeparator(','); 
     DecimalFormat OUTPUT_FORMAT = new DecimalFormat("000,000.00", SYMBOLS); 

     System.out.println(OUTPUT_FORMAT.format(0.01)); 
     // got 000,000.01 
     System.out.println(OUTPUT_FORMAT.format(0.12)); 
     // got 000,000.12 
     System.out.println(OUTPUT_FORMAT.format(123456)); 
     // got 123,456.00 
     System.out.println(OUTPUT_FORMAT.format(123456.78)); 
     // got 123,456.78 
     System.out.println(OUTPUT_FORMAT.format(1234)); 
     // got 001,234.00 
     System.out.println(OUTPUT_FORMAT.format(1234.56)); 
     // got 001,234.56 

     SYMBOLS.setZeroDigit('_'); 
     OUTPUT_FORMAT = new DecimalFormat("000,000.00", SYMBOLS); 
     System.out.println(OUTPUT_FORMAT.format(0.01)); 
     // expected ______._1 but got ___,___._` 
     System.out.println(OUTPUT_FORMAT.format(0.12)); 
     // expected ______.12 but got ___,___.`a 
     System.out.println(OUTPUT_FORMAT.format(123456)); 
     // expected 123,456.__ but got `ab,cde.__ 
     System.out.println(OUTPUT_FORMAT.format(123456.78)); 
     // expected 123,456.78 but got `ab,cde.fg 
     System.out.println(OUTPUT_FORMAT.format(1234)); 
     // expected __1,234.00 or at least __1,234.__ but got __`,abc.__ 
     System.out.println(OUTPUT_FORMAT.format(1234.56)); 
     // expected __1,234.56 but got __`,abc.de 
    } 

} 

Aslında, pek yakın ama boş bir sayı (sondaki alt çizgilerle) formated doğru olmadığını: _ __ ,_ __. Neyse

__ , beklenen davranış almak konusunda önerilerde? num

+0

DecimalFormatSymbols.setZeroDigit 'karakteri sıfır ** ve onu izleyen diğer tüm basamakları temsil edecek şekilde ayarlamak için kullanılır **. '' Aşağıdaki _' ve 'görüyoruz yüzden ___, ___._' 'yerine' arasında ___, ___._ 1' Düzenleme: biçimlendirme çalışmıyor ama herhalde noktası olsun. –

+0

evet, setZeroDigit'in nasıl çalıştığını biliyorum ama beklenen – Belun

cevap

6
"_________".substring(num.length())+num; 

numaranızı tutan bir String olduğunu. Bir String bir double dönüştürmek için, Double.toString(myDouble) kullanabilirsiniz.

+1

elde etmek için bir geçici çözüm istiyordum Ne yazık ki 'Double.toString (myDouble)', "123,456.78" yerine 123456.78 değerini veriyor. – OscarRyz

3

Apache Commons kütüphanesinden StringUtils.leftPad() yöntemi kullanabilirsiniz.

// pad to 10 chars 
String padded = StringUtils.leftPad("123.456", 10, '_'); 
// padded will be equal to "___123.456" 
+1

, ______ 1'e nasıl dolduracağız? ? – Belun

+1

@Belun Haklısınız, askerin gereksinimini yerine getirmenin tek yolu bir kullanıcı yöntemi geliştirmektir. – Marcelo

1

Da daaa

import java.text.DecimalFormat; 

class F { 
    public static void main(String ... args) { 
    DecimalFormat f = new DecimalFormat("000,000.00"); 
    for(double d : new double[]{ 0.01, 0.12, 123456, 123456.78, 1234, 1234.56 }){ 
     System.out.println( 
     f.format(d).replaceAll("0","_").replaceAll("_,_","__") 
    ); 
    } 
    } 
} 

Çıktı:

______._1 
______.12 
123,456.__ 
123,456.78 
__1,234.__ 
__1,234.56 

Muhtemelen yedek tek adımda yapılabilir ama bunu size bildireceğiz.

+2

Bu 1230.45' veya 1234.05' – Marcelo

+0

gibi sayılarla çalışmaz, Marcelo’dan emin değilim, OP örneğin ____________ ''' 0.01' için bekliyor ve '______. 01''yi bekliyor. Asıl sorudan * "beklenen ..." * aldım ve iddialarla test ettim. Buraya bakın: https://gist.github.com/1125723 OP beklentilerine göre bu kod gerekli olanı yapar. – OscarRyz

İlgili konular