Printf: различия в реализации Java и C

2

Сегодня я заметил, что не могу использовать * для передачи аргументов ширины или точности в реализацию 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

Есть ли другие различия в реализации, о которых я должен знать?

  • 1
    Для Java, см. Документацию API java.util.Formatter .
  • 0
    printf("[% + + 0 + ----- + +6d]\n", 42); является допустимым C для печати 42 с выравниванием по левому краю в поле шириной 6 со знаком +, заключенным в [] и оканчивающимся переводом строки.
Теги:
printf

2 ответа

12
Лучший ответ

Я бы не подумал об этом как о различиях. Я просто внимательно прочитал документацию Java и полностью исходил из этого. Мышление с точки зрения различий, вероятно, приведет к проскальзыванию через сеть.

Другими словами, я бы рассматривал сходства как совпадения и предполагал, что два разных, пока не будет доказано иначе:)

  • 0
    справедливо. Я склонен думать о printf и его формате как о стандарте, но я могу попытаться изменить свое мышление, чтобы принять реальность.
1

Одна разница ударила меня совсем недавно: при печати числа с плавающей запятой% 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) 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню