0

默认情况下,默认 java String.format 会将浮点值四舍五入为 6 位,这可以通过在格式字符串中使用格式说明符来覆盖。

如何创建一个格式化程序实例,默认情况下打印要格式化的浮点数或双精度的完整机器精度,但保留在格式字符串中指定较低精度的能力。

举个例子,下面的代码

String.format("%f",1.23456789)

返回

1.234568

我想创建一个自定义格式化程序,以便

MyFormatter.format("%f",1.23456789)

返回

1.23456789

如果格式字符串为“%.2f”,则生成与 String.format 相同的输出

那是

String.format("%.2f",1.23456789).equals(MyFormatter.format("%.2f",1.23456789))

应该评估为真

4

2 回答 2

1

您可能需要考虑 Java 的toString方法。它只产生足够的数字来唯一地将值与相邻的浮点值区分开来。所以像 2 这样简单的数字会产生短字符串,但是需要更多数字来表示的数字会产生更长的字符串。

因为位数取决于类型(更精细的类型有更近的邻居),所以结果对于floatdouble操作数可能不同,即使被转换的值完全相同。(在这里讨论。)

如果可能,请直接使用内置格式化程序,或者通过在字符串缓冲区中操作它们的结果。基数之间的转换是一个令人惊讶的复杂问题,可能涉及扩展精度算术和数学证明。进行正确转换的算法是已知的,并且有描述它们的科学论文。因此可以自己编写,但通常最好依靠已经完成的出色工作。

在你的情况下,你可能会使用这样的东西:

If format string is "%f", then use the toString method.
Otherwise, use the format method.
于 2013-04-15T13:30:21.520 回答
0

这是不可能的。String.format()以小数位表示精度。浮点变量没有小数位,它们有二进制位。FP 变量的“全机精度”是该点之后的二进制位数。

于 2013-04-15T10:18:03.840 回答