Форматирование числа с плавающей точкой до 2 десятичных знаков

210

В настоящее время я создаю модуль продаж для веб-сайта клиентов. До сих пор у меня была идеальная цена продажи для расчета, но я застрял, отформатировав вывод в 2 десятичных знака.

В настоящее время я вызываю это в переменной, чтобы данные могли связать результаты с представлением списка.

Sale = float.Parse(((x.Sale_Price - (x.Sale_Price * (x.Discount_Price / 100))).ToString())),

Может кто-нибудь показать мне, как отформатировать вывод в 2 десятичных знака ?? Большое спасибо!

Каллум
источник
Проверьте это, я не уверен, но, возможно, это будет работать ToString ("#. ##");
Syeda

Ответы:

467

Вы можете передать формат в ToStringметод, например:

myFloatVariable.ToString("0.00"); //2dp Number

myFloatVariable.ToString("n2"); // 2dp Number

myFloatVariable.ToString("c2"); // 2dp currency

Строки стандартного числового формата

WraithNath
источник
38
«N2» и «C2» добавят тысячи разделителей, а «0,00» - нет.
Марк К
5
На всякий случай, если вы не уверены (я был), все эти способы форматирования значения с плавающей запятой обеспечивают округление.
RenniePet
46

Первое, что вам нужно сделать, это использовать decimalтип вместо floatцен. Использование floatабсолютно неприемлемо для этого, потому что оно не может точно представлять большинство десятичных дробей.

Как только вы это сделали, Decimal.Round()можно использовать для округления до 2 мест.

Майкл Боргвардт
источник
36

String.Format("{0:#,###.##}", value)

Более сложный пример из String Formatting в C # :

String.Format("{0:$#,##0.00;($#,##0.00);Zero}", value);

Это выдаст «$ 1240,00», если пройдено 1243,50. Он выведет тот же формат, но в скобках, если число отрицательное, и выведет строку «Ноль», если число ноль.

alexandrul
источник
4
string outString= number.ToString("####0.00");
danyolgiax
источник
1
Существуют разные значения между «0» и «#» в произвольном формате. «0»: заменяет ноль соответствующей цифрой, если она есть; в противном случае в результирующей строке появляется ноль. «#»: Заменяет символ «#» соответствующей цифрой, если она есть; в противном случае никакая цифра не появляется в строке результата. Справка
瑲 瑲
3

Как уже упоминалось, вам нужно будет использовать форматированный результат; который все это делается через Write(), WriteLine(), Format()и ToString()методы.

То, что не было упомянуто, является форматом с фиксированной запятой, который учитывает определенное количество десятичных знаков. Он использует «F», а число после «F» - это количество выводимых десятичных разрядов, как показано в примерах.

Console.WriteLine("{0:F2}", 12);    // 12.00 - two decimal places
Console.WriteLine("{0:F0}", 12.3);  // 12 - ommiting fractions
Джексон
источник
2

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

$"{1234.5678:0.00}"        "1234.57"        2 decimal places, notice that value is rounded
$"{1234.5678,10:0.00}"     "   1234.57"     right-aligned
$"{1234.5678,-10:0.00}"    "1234.57   "     left-aligned
$"{1234.5678:0.#####}"     "1234.5678"      5 optional digits after the decimal point
$"{1234.5678:0.00000}"     "1234.56780"     5 forced digits AFTER the decimal point, notice the trailing zero
$"{1234.5678:00000.00}"    "01234.57"       5 forced digits BEFORE the decimal point, notice the leading zero
$"{1234.5612:0}"           "1235"           as integer, notice that value is rounded
$"{1234.5678:F2}"          "1234.57"        standard fixed-point
$"{1234.5678:F5}"          "1234.56780"     5 digits after the decimal point, notice the trailing zero
$"{1234.5678:g2}"          "1.2e+03"        standard general with 2 meaningful digits, notice "e"
$"{1234.5678:G2}"          "1.2E+03"        standard general with 2 meaningful digits, notice "E"
$"{1234.5678:G3}"          "1.23E+03"       standard general with 3 meaningful digits
$"{1234.5678:G5}"          "1234.6"         standard general with 5 meaningful digits
$"{1234.5678:e2}"          "1.23e+003"      standard exponential with 2 digits after the decimal point, notice "e"
$"{1234.5678:E3}"          "1.235E+003"     standard exponential with 3 digits after the decimal point, notice "E"
$"{1234.5678:N2}"          "1,234.57"       standard numeric, notice the comma
$"{1234.5678:C2}"          "$1,234.57"      standard currency, notice the dollar sign
$"{1234.5678:P2}"          "123,456.78 %"   standard percent, notice that value is multiplied by 100
$"{1234.5678:2}"           "2"              :)

Предупреждение о производительности

Интерполированные строки медленные. По моему опыту это порядок (от быстрого к медленному):

  1. value.ToString(format)+" blah blah"
  2. string.Format("{0:format} blah blah", value)
  3. $"{value:format} blah blah"
saastn
источник