java的String.format()中数字的可配置重要性?

时间:2014-11-11 12:12:44

标签: java string-formatting

我的任务是编写函数来格式化具有可配置重要性的双精度集(坐标)。我现在有:

public String dPath(int sign) {
    return String.format ("%s %." + sign + "f %." + sign + "f", prefix, this.x, this.y);
}

有效:

Movement m = new Movement(3.14159265, 2.7654321);
Assert.assertEquals("m 3.142 2.765", m.dPath(3));

是否可以在没有字符串连接的情况下执行此操作?目前的实现看起来有点不自然,但这也可能归因于不自然的用例?

3 个答案:

答案 0 :(得分:2)

只是为了好的措施。

return String.format(String.format("%%s %%.%df %%.%df", sign, sign),
        prefix, this.x, this.y);

答案 1 :(得分:1)

也许是这样的?

public String dPath(int sign) 
{
    String pattern = "%s %.signf %.signf";
    pattern = pattern.replaceAll("sign", String.valueOf(sign));
    return String.format(pattern, prefix, this.x, this.y);
}

答案 2 :(得分:1)

可以使用MessageFormat,对于数字,可以使用单独的NumberFormat。代码有点多,但一个很好的方面是本地化:千位分隔符,法语的小数逗号,等等。

MessageFormat format = new MessageFormat("{0, string} {1, number} {2, number}");
if (0 > sign || sign > 10) {
    sign = 3;
}
DecimalFormat decF = new DecimalFormat(".##########".substring(0, sign + 1);
format.setFormatByArgumentIndex(1, decF);
format.setFormatByArgumentIndex(2, decF);
return format.format(prefix, this.x, this.y);