Java по умолчанию номер для поведения строки - PullRequest
5 голосов
/ 17 марта 2011

У меня есть два проекта в моей рабочей области Eclipse, у которых есть похожие задачи. Оба проекта имеют специальную часть, где я конвертирую double в String.

Я оба проекта сделал это, позвонив по номеру String.valueOf(var).

В старом проекте я всегда получаю число в формате, подобном «-0.00097656», который мне нужен. В более новом я получаю десятый экспоненциальный формат, такой как -9.765625E-4. У меня также есть тот факт, что старый проект обрезает строку, чтобы быть достаточно маленьким.

Мой вопрос: какие команды могут вызывать такое поведение, когда java изменяет вывод преобразования по умолчанию. Я уже искал код, но я не вижу что-то, что делает это. Или это вариант затмения?

Я хочу, чтобы новый проект соответствовал старому, и я не хочу использовать эти вызовы формата строки каждый раз в новом проекте. В любом месте старого проекта должна быть настройка или некоторые вызовы ...

Надеюсь, кто-нибудь может дать подсказку.

Ответы [ 3 ]

6 голосов
/ 17 марта 2011

Это ясно объяснено в javadoc (см. Double.toString()) - формат зависит от величины числа:

  • Если m больше или равно 10 -3 , но меньше 10 7 , то оно представляется как целая часть m, в десятичной форме без начальных нулей, за которыми следует '.' ('\ u002E'), за которым следуют одна или несколько десятичных цифр, представляющих дробную часть m .

  • Если м меньше 10 -3 или больше или равно 10 7 , то оно представляется в так называемом " компьютеризированная научная запись ". Пусть n будет уникальным целым числом таким, что 10 n <= <em>m <10 <sup>n + 1 ; затем пусть a будет математически точным отношением m и 10 n , так что 1 <= <em>a <10. Величина затем представляется как целая часть <em>a , как одна десятичная цифра, за которой следует «.» ('\ u002E'), за которыми следуют десятичные цифры, представляющие дробную часть a , за которыми следует буква 'E' ('\ u0045'), за которой следует представление n как десятичное целое число, полученное методом Integer.toString(int).

Если вы хотите определенный формат, используйте String.format() или что-то подобное.

1 голос
/ 17 марта 2011

Попробуйте String.format () . И взгляните на Синтаксис строки формата . Это должно помочь привести ваш двойник в нужный вам формат.

String.format("%1$f",var);

Должен делать то, что вы хотите.

0 голосов
/ 17 марта 2011

Попробуйте, digits применяется к точности формата, и при необходимости вы можете иметь ее константу.

public static String formatDouble(double d, int digits){
    String s = String.format(Locale.US, "%."+digits+"f", d);
    if (s.indexOf('.')<0)
        return s;

    int last = s.length();                  
    while (s.charAt(--last)=='0');
    return s.substring(0,last+1);       
}
...