запретить округление десятичных дробей при использовании формата строки валюты - PullRequest
4 голосов
/ 18 мая 2011

У меня есть некоторые десятичные данные, поступающие из внешней службы.Мне нужно отформатировать данные в 2 знака после запятой, так как они представляют деньги, но если я использую стандартный формат C, я округляю число:

var x = 42.999m;

var y = string.Format("{0:C}", x);

В результате y содержит £ 43,00.Как я могу получить округление до £ 42,99?

(обратите внимание, что этот вопрос не тот же)

Ответы [ 2 ]

3 голосов
/ 18 мая 2011

Если вы хотите использовать стратегию округления не по умолчанию, вам нужно сделать что-то вроде:

var x = 42.999m;

var y = string.Format("{0:C}", Math.Floor(x * 100) / 100);

Math.Floor округляется; однако это не занимает много десятичных разрядов, поэтому вы должны принудительно установить поведение с двумя десятичными разрядами.

1 голос
/ 23 февраля 2012

хотя этот вопрос был решен, но я предлагаю вам использовать

var y = String.Format("{0:c3}",x);
// "{0:C3}" is for -123.456 ("C3", en-US) -> ($123.456)

Отсюда

...