String.format中的%s代表数字

时间:2011-10-24 06:58:40

标签: java printf

如果不需要额外的格式化,在格式化数字时是否有任何理由不使用%s格式说明符?

e.g。

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还是{{} { 1}}或其他东西

1 个答案:

答案 0 :(得分:34)

我希望在千位分隔符和其他特定于语言环境的选项方面存在潜在的差异。第一种方法是调用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);
  }
}