Не понимаю синтаксиса Java. Как преобразовать: "%6d %7.1f %5.1f" в эквивалент C #?

Я получаю эту распечатку на C #: %6d %7.1f %5.1f

< Сильный > Пробовал :

"{0:d6} {7:1f} {5:1f}"

Но, столкнулся с исключением.

Исключение:

Unhandled Exception: System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
   at System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)
   at System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
   at System.String.Format(String format, Object arg0, Object arg1, Object arg2)
   at experiment.Main(String[] args)

Код Java:

String.format("%6d %7.1f %5.1f", int, double, double/double);

Очевидно, какие значения будут сгенерированы на основе типов данных переменных.

РЕДАКТИРОВАТЬ: я только что посмотрел, Преобразуйте эту строку Java код в код C #

< Сильный > C #

String.Format("{0:x2}", arrayOfByte[i]);

< Сильный > Java

String.format("%02x", arrayOfByte[i]);

ПОЖАЛУЙСТА. ПОЖАЛУЙСТА. ПОЖАЛУЙСТА. НЕ закрывайте это. Любезно. Пожалуйста.

-1
John Smith 2 Сен 2020 в 10:44

2 ответа

Лучший ответ

Начиная с C # 6. вы можете использовать интерполяцию . В вашем случае вы можете попробовать следующее:

string formattedString = $"{0:d6} {7.1:f} {5.1:f}";

До C # 6 вы можете попробовать следующее:

string formattedString = String.Format("{0:d6} {1:f} {2:f}", 0, 7.1, 5.1);
0
Chandra Prakash Ajmera 2 Сен 2020 в 08:47

ПРИМЕЧАНИЕ. Полностью переписал свой исходный ответ на основе (надеюсь) лучшего понимания спецификаторов формата Java.

На основании моего (понимания, ограниченного Google), %6d, %7.1f и %5.1f соответствуют следующему:

  • Целое число длиной до 6 символов, с дополнением, если меньше 6.
  • Число с плавающей запятой длиной до 7 символов (включая десятичную точку и десятичную часть) с точностью до 1.
  • Число с плавающей запятой до 5 символов (включая десятичную точку и десятичную часть) с точностью до 1.

Вы можете сделать это с помощью String.Format C #, например:

var newString = String.Format("{0,6:d} {1,7:f1}, {2,5:f1}", 605, 20.5, 8.22);

В результате получится следующая строка:

"   605    20.5  8.22"

Первая цифра в каждой группе заполнителей (определяемая { и }) соответствует аргументу, переданному после строки:

  • 0 = 605
  • 1 = 20,5
  • 2 = 8,22

Вторая цифра после , относится к длине строки (включая десятичные точки и десятичные части).

  • 6 = 6 знаков для целого числа
  • 7 = 7 символов для числа с плавающей запятой
  • 5 = 5 символов для числа с плавающей запятой

Буквы и цифры после : являются спецификаторами формата.

  • d = целое число
  • f1 = плавающее с точностью до 1.

В результате получается строка выше:

  • {0,6: d} превращает 605 в "605" (3 ведущих пробела из-за 6 перед :)
  • {1,7: f1} превращает 20,5 в "20,5" (3 ведущих пробела из-за 7 перед :)
  • {2,5: f1} превращает 8,22 в «8,2» (1 начальный пробел из-за 5 перед: и 1 десятичное число из-за точности).

Как я сказал ранее, проверьте String. Формат и Standard Numeric Форматировать строки для получения дополнительной информации.

2
Tim 2 Сен 2020 в 09:03