什么是C的printf%g格式说明符的Java等价物?

Joh*_*hat 7 c java printf formatter

我尝试使用Formatter.format,但这似乎将尾数留在带有0尾数的数字上,而C版本却没有.在Java中是否有相当于C的%g格式说明符,如果没有,有没有办法伪造它?出于兼容性原因,我的目的是保持尾数与C完全相同.

foo.c的

#include <stdio.h>

int main (int argc, char const *argv[])
{
    printf("%g\n", 1.0);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Main.java

class Main {
        public static void main(String[] args) {
                System.out.printf("%g\n", 1.0);
        }
}
Run Code Online (Sandbox Code Playgroud)

安慰:

$ javac Main.java && java Main
1.00000
$ gcc foo.c && ./a.out
1
Run Code Online (Sandbox Code Playgroud)

类似地,使用1.2作为输入,Java版本中的尾数较长

$ javac Main.java && java Main
1.20000
$ gcc foo.c && ./a.out
1.2
Run Code Online (Sandbox Code Playgroud)

hig*_*ted 2

您是否尝试过java.text.DecimalFormat类?

System.out.println(new DecimalFormat().format(1.0));
Run Code Online (Sandbox Code Playgroud)

输出:

1
Run Code Online (Sandbox Code Playgroud)

然而:

System.out.println(new DecimalFormat().format(1.2));
Run Code Online (Sandbox Code Playgroud)

输出:

1.2
Run Code Online (Sandbox Code Playgroud)

  • 为什么这会被接受?DecimalFormat 似乎没有提供选择“%e”或“%f”中较短者的“%g”功能。 (2认同)