двойное форматирование строки - PullRequest
3 голосов
/ 09 сентября 2010

У меня есть значение Double xx.yyy, и я хочу преобразовать в строку "xxyyy" или "-xxyy", если значение отрицательное.

Как я могу это сделать?

Привет.

Ответы [ 2 ]

8 голосов
/ 09 сентября 2010
double yourDouble = 61.9155;
String str = String.valueOf(yourDouble).replace(".", "");

Объяснение:

  • String.valueOf(): преобразование вашего двойного в строку
  • str.replace(s1, s2): возвратновая строка равна str, где все s1 заменены на s2

Обновление :

ОП имел несколькодополнительные условия (но я не знаю точно с одним):

  • отрицательное число -> только два десятичных знака.

    public static String doubleToSpecialString(double d)
    {
        if (d >= 0)
        {
             return String.valueOf(d).replace(".", "");
        } else
        {
             return String.format("%.2f", d).replace(",", "");
        }
    }
    
  • отрицательноечисло -> на один десятичный знак меньше

    public static String doubleToSpecialString(double d)
    {
        if (d >= 0)
        {
             return String.valueOf(d).replace(".", "");
        } else
        {
             String str = String.valueOf(d);
             int dotIndex = str.indexOf(".");
             int decimals = str.length() - dotIndex - 1;
             return String.format("%." + (decimals - 1) + "f", d).replace(",", "");
        }
    }
    
3 голосов
/ 09 сентября 2010

В этом ответе используется десятичный форматер.Предполагается, что входное число всегда строго в форме (-) xx.yyy.

/**
 * Converts a double of the form xx.yyy to xxyyy and -xx.yyy to -xxyy. 
 * No rounding is performed.
 * 
 * @param number The double to format
 * @return The formatted number string
 */
public static String format(double number){
    DecimalFormat formatter = new DecimalFormat("#");
    formatter.setRoundingMode(RoundingMode.DOWN);
    number *= number < 0.0 ? 100 : 1000;
    String result = formatter.format(number);
    return result;
}
...