Форматирование значения с плавающей запятой в конкретный формат - форматирование чисел Java и C # - PullRequest
3 голосов
/ 15 мая 2019

Мне нужно преобразовать байт в килобайт. Так что я делю значение на 1024 Мне нужно отобразить значение в этом формате, указанном изначально в форматировании чисел Java ###,###,###,##0.00 KB

Этот код

 string format="###,###,###,##0.00 KB";
 return String.Format(format, x);

производит следующий вывод ###, ###, ###, ## 0,00 КБ

Эта строка форматирования указана вJava-аналог, разве такой же подход не работает в C #?Пожалуйста, совет.

1 Ответ

2 голосов
/ 15 мая 2019

String.Format и IFormattable.ToString (нужное здесь форматирование) различны, но связаны между собой.

String.Format требуется некоторая строка формата с заполнителями, а замещенные значения также могут иметь форматирование, если они реализуютIFormattable интерфейс.

Console.WriteLine(String.Format("{0} KB", 42.ToString("###,###,###,##0.00")));

Форматирование 42 может быть встроено:

Console.WriteLine(String.Format("{0:###,###,###,##0.00} KB", 42));

Что может быть дополнительно упрощено интерполяцией:

Console.WriteLine($"{42:###,###,###,##0.00} KB"));

OfКонечно, 42 может быть переменной в интерполяции ($"{numValue:###,###,###,##0.00} KB}").Однако строка формата не может быть переменной, поэтому это не будет работать:

string format = "{x} KB";
Console.WriteLine($format); // does not compile, use String.Format in this case

Примечание:

Console.WriteLine также поддерживает форматирование, поэтому приведенные выше примеры могутбыли написаны так:

Console.WriteLine("{0:###,###,###,##0.00} KB", 42);

Я использовал явное String.Format, чтобы избежать путаницы.


Обновление

Если форматирование размера происходит от внешнегоисточник, вы не можете вставить его в строку формата, но это не проблема.Так что если у вас есть

string fileSizeFormat = "###,###,###,##0.00 KB";

Вы все еще можете использовать myFloatWithFileSize.ToString(fileSizeFormat).В этом случае String.Format требуется, только если вы хотите встроить это в хорошее предложение или что-то в этом роде:

return String.Format("The size of the file: {0}", fileSize.ToString(fileSizeFormat));

или с интерполяцией:

return $"The size of the file: {fileSize.ToString(fileSizeFormat)}";
...