Подтвердить что ты не робот

% s в String.format для чисел

Есть ли причина не использовать %s для спецификатора формата при форматировании чисел, если не требуется дополнительное форматирование?

например.

int answer = 42;
String text = String.format("The answer is %s", answer);

а не более обычного:

int answer = 42;
String text = String.format("The answer is %d", answer);

Причина, по которой я спрашиваю, заключается в том, что я хочу внести некоторые автоматические изменения в исходный код, и было бы неудобно выяснять, является ли тип answer int или String или что-то еще

4b9b3361

Ответ 1

Я бы ожидал, что разница в тысячах разделителей и другие варианты, зависящие от локали, будут потенциальными. Первый подход просто вызовет Integer.toString (который не зависит от языка), потому что Integer не реализует Formattable. Второй способ будет использовать потенциально локализованное целочисленное форматирование - он может вставлять тысячи разделителей, возможно даже использовать другой набор цифр и т.д.

Глядя на документы более тщательно, похоже, что разделители группировки не будут применяться без определенного флага форматирования, но:

Алгоритм локализации номеров

После получения цифр для целой части, дробной части и показателя (в зависимости от типа данных) применяется следующее преобразование:

  • Каждый цифровой символ d в строке заменяется определенной по языку цифрой, вычисленной относительно текущей нулевой цифры z; то есть d - '0' + z.

Пример, где это имеет значение:

import java.util.Locale;

public class Test {
  public static void main(String[] args) {
    Locale.setDefault(new Locale("hi", "IN"));
    System.out.printf("String: %s; Number: %d\n", 1234, 1234);
  }
}