20

在 C 中,printf() 语句允许在参数列表中提供精度长度。

printf("%*.*f", 7, 3, floatValue);

其中星号分别替换为第一个和第二个值。

我正在寻找 Android/Java 中的等价物;String.format() 抛出异常。

编辑:谢谢,@Tenner;它确实有效。

4

4 回答 4

16

我用

int places = 7;
int decimals = 3;

String.format("%" + places + "." + decimals + "f", floatValue);

有点难看(字符串连接使其性能不佳),但它可以工作。

于 2012-09-11T18:33:44.520 回答
4
System.out.print(String.format("%.1f",floatValue));

这将打印精度为 1 位小数的 floatValue

于 2012-09-11T18:33:54.593 回答
2

您可以格式化格式:

String f = String.format("%%%d.%df", 7, 3);
System.out.println(f);
System.out.format(f, 111.1111);

这将输出:

%7.3f
111,111

你也可以使用这样的小助手:

public static String deepFormatter(String format, Object[]... args) {
    String result = format;
    for (int  i = 0; i != args.length; ++i) {
        result = String.format(result, args[i]);
    }

    return result;
}

然后,以下调用将与上面的代码等效并返回111,111

deepFormatter("%%%d.%df", new Object[] {7, 3}, new Object[] {111.1111});

它不如 printf 漂亮,而且输入格式可能会变得杂乱无章,但你可以用它做更多事情。

于 2013-05-20T23:54:48.487 回答
1

就像这样...

%AFWPdatatype

A- 参数数量

F- 标志

W- 宽度

P- 精确

String.format("%.1f",float_Val);

于 2012-09-11T18:39:32.180 回答