%s,格式表示数字

2022-09-01 18:58:15

如果不需要额外的格式设置,那么在设置数字格式时,是否有任何理由不用于格式说明符?%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);

我问的原因是我想对源代码进行一些自动更改,并且必须弄清楚类型是还是其他东西是不方便的。answerintString


答案 1

我预计在千位分隔符和其他特定于区域设置的选项方面存在潜在的差异。第一种方法只是调用(不区分区域设置),因为 不实现 。第二种将使用可能区分区域设置的整数格式 - 它可以插入数千个分隔符,甚至可能使用一组不同的数字等。Integer.toStringIntegerFormattable

更仔细地查看文档,看起来如果没有特定的格式标志,则不会应用分组分隔符,但是:

数字定位算法

获得整数部分、小数部分和指数(根据数据类型而定)的数字后,将应用以下转换:

  • 字符串中的每个数字字符 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);
  }
}

答案 2