Формат десятичного числа до двух мест или целого числа

За 10 хочу 10 а не 10.00 Для 10.11 я хочу 10.11

Это возможно без кода? т.е. путем указания только строки формата simlar к {0: N2}

Ответ 1

decimal num = 10.11M;

Console.WriteLine( num.ToString( "0.##" ) );

Ответ 2

Мне кажется, что десятичная точность является неотъемлемой частью десятичного типа, по умолчанию она равна 4 знакам после запятой. Если я использую следующий код:

decimal value = 8.3475M;
Console.WriteLine(value);
decimal newValue = decimal.Round(value, 2);
Console.WriteLine(newValue);

Вывод:

8.3475
8.35

Ответ 3

Это может быть достигнуто с помощью CultureInfo. Используйте следующую инструкцию using для импорта библиотеки.

using System.Globalization;

Для десятичного преобразования ## можно использовать для необязательных десятичных разрядов, а 00 можно использовать для произвольных десятичных разрядов. Проверьте приведенные ниже примеры

double d1 = 12.12;
Console.WriteLine("Double :" + d1.ToString("#,##0.##", new CultureInfo("en-US")));

String str= "12.09";
Console.WriteLine("String :" + Convert.ToDouble(str).ToString("#,##0.00", new CultureInfo("en-US")));

String str2 = "12.10";
Console.WriteLine("String2 with ## :" + Convert.ToDouble(str2).ToString("#,##0.##", new CultureInfo("en-US")));
Console.WriteLine("String2 with 00 :" + Convert.ToDouble(str2).ToString("#,##0.00", new CultureInfo("en-US")));


int integ = 2;
Console.WriteLine("Integer :" + Convert.ToDouble(integ).ToString("#,##0.00", new CultureInfo("en-US")));

результаты следующие

Double :12.12
String :12.09
String2 with ## :12.1
String2 with 00 :12.10
Integer :2.00