Как дополнить числа подчеркиванием в Java? - PullRequest
5 голосов
/ 04 августа 2011

Как дополнить числа символами подчеркивания в Java вместо обычных нулей?

Например, я хочу

  • 123,45 для форматирования в ___ 123,45 и
  • 12345,67 для преобразования в _12345,67
  • 0,12 будет преобразовано в _ __ _ __ .12

Я перепробовал много вещей, и самое близкое, что я получил, было это (с помощью SYMBOLS.setZeroDigit ('_');):

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
    }

}

Ну, не совсем близко, но пустое число, если оно сформировано правильно (с последующим подчеркиванием): _ __ _ __ . __

Во всяком случае, предложения о том, как получить ожидаемое поведение?

Ответы [ 3 ]

6 голосов
/ 04 августа 2011
"_________".substring( num.length() )+num;

, где num - это String, содержащий ваш номер. Чтобы преобразовать double в String, вы можете использовать Double.toString(myDouble).

3 голосов
/ 04 августа 2011

Вы можете использовать метод StringUtils.leftPad() из библиотеки Apache Commons.

// pad to 10 chars
String padded = StringUtils.leftPad("123.456", 10, '_');
// padded will be equal to "___123.456"
2 голосов
/ 04 августа 2011

Да дааа

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("_,_","__")
      );
    }
  }
}

Вывод:

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

Возможно, замена может быть сделана за один шаг, но я дам вам это.

...