Сегодня я заметил, что не могу использовать *
для передачи аргументов ширины или точности в реализацию Java printf
.
Таким образом, следующие аргументы printf
допустимы в C, но не в Java:
"%*d", 10, 3
"%-*d", 10, 3
"%0*d", 10, 3
"%*.5f", 11, 1.0/9
"%-11.*f", 5, 1.0/9
"%0*.*f", 11, 5, 1.0/9
Есть ли другие различия в реализации, о которых я должен знать?
Я бы не подумал об этом как о различиях. Я просто внимательно прочитал документацию Java и полностью исходил из этого. Мышление с точки зрения различий, вероятно, приведет к проскальзыванию через сеть.
Другими словами, я бы рассматривал сходства как совпадения и предполагал, что два разных, пока не будет доказано иначе:)
printf
и его формате как о стандарте, но я могу попытаться изменить свое мышление, чтобы принять реальность.
Одна разница ударила меня совсем недавно: при печати числа с плавающей запятой% g (автоматически выберите% e или% f) флаг точности отличается:
Java: precision =
"number of fractional digits after the decimal point" (%f, %e)
"total number of digits in the resulting magnitude after rounding" (%g %G)
C: precision =
"number of fractional digits after the decimal point" (%f %e )
"maximum number of significant digits" (%g %G)
java.util.Formatter
.printf("[% + + 0 + ----- + +6d]\n", 42);
является допустимым C для печати 42 с выравниванием по левому краю в поле шириной 6 со знаком +, заключенным в[]
и оканчивающимся переводом строки.