Добавить разделитель запятой тысяч к десятичному (.net)

У меня есть десятичное число, скажем, 1234.500.

Я хочу отобразить его как 1234,5.

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

string.Format("{0:0,0}",1234.500) удаляет десятичный знак, а другие параметры форматирования, похоже, независимо используют два десятичных знака.

Кто-нибудь может предложить понимание?


person maxp    schedule 19.10.2009    source источник
comment
Изменить, просто для уточнения 1234,560, я ожидаю 1234,56   -  person maxp    schedule 19.10.2009
comment
Вы хотите отобразить его как 1234.**5**, верно? Отредактируйте сообщение, чтобы отразить это.   -  person Amarghosh    schedule 19.10.2009
comment
Вы хотите использовать локальные системные настройки или просто заставить приложение отформатировать его таким образом?   -  person Stefan Steinegger    schedule 19.10.2009
comment
Какое отношение к этому имеет регулярное выражение?   -  person Svish    schedule 19.10.2009


Ответы (6)


Вы должны использовать собственное форматирование, например #,##0.00

string s = string.Format("{0:#,##0.00}", xx);

Произведет 1,234.50, когда xx = 1234,5M
забудьте о преобразовании в double, это на самом деле не поможет.

person Henk Holterman    schedule 19.10.2009
comment
Не хочу никаких конечных нулей - person maxp; 19.10.2009
comment
Затем удалите 1 или более нулей: #,##0. или сделать их необязательными: #,##0.# - person Henk Holterman; 19.10.2009
comment
Кроме того, десятичный формат, согласно стандарту IEEE, СЛЕДУЕТ форматировать в строку (если не указаны другие поставщики формата) с отображаемыми/сохраненными нулями после десятичной точки. - person Henrik; 18.11.2012
comment
можно ли заставить это работать и для разных культур/локалей? - person Califf; 15.08.2014
comment
@Califf - конечно может. Посмотрите список перегрузок. - person Henk Holterman; 16.08.2014

Знаете ли вы, что .NET имеет встроенную поддержку правильного форматирования чисел в соответствии с региональными настройками каждого пользователя вашего приложения? Возможно, лучше использовать собственные региональные настройки пользователя (фреймворк .NET уже знает все нужные настройки).

Однако, если вы хотите исправить свое приложение для форматирования чисел в определенных региональных настройках, вы все равно можете использовать конкретную локаль по вашему выбору и заставить .NET использовать ее в качестве основы для всего форматирования (не только чисел):

using System.Globalization;
using System.Threading;
...
CultureInfo us = new CultureInfo("en-US");

а потом

Thread.CurrentThread.CurrentUICulture = us;

или просто

Console.WriteLine(d.ToString("c", us));

Вы должны знать, что использование запятых в качестве разделителя тысяч подходит для Великобритании и США, но это не то, как тысячи должны отображаться в других странах.

«тысяча двадцать пять отображается как 1025 в США и 1,025 в Германии. В Швеции разделителем тысяч является пробел»

MSDN имеет специальный раздел, посвященный этой теме, которую они называют "Глобализация" ( т. е. это хороший поисковый термин, если вам когда-нибудь понадобится выследить более подробную информацию). На этой странице описывается, как использование знака фунта работает в качестве заполнителя для удаления нулей в конце (как было предложено Хенком Холтерманом в предыдущем комментарии).

См. также строки пользовательского числового формата.

person rohancragg    schedule 19.10.2009

Другая альтернатива:

decimal d = 1234.56m;
string s = d.ToString("N");    // 1,234.56
person LukeH    schedule 19.10.2009

Вы пробовали это?

   String.Format("{0:0,0.00}", 1234.560);
person junmats    schedule 19.10.2009
comment
Не удаляет конечные нули из десятичного числа — попробуйте String.Format({0:0,0.00}, 1234.5) - person maxp; 19.10.2009

попробуй это !

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        Try
            TextBox1.Text = Format(CInt(TextBox1.Text), "#,#")
            TextBox1.SelectionStart = TextBox1.Text.Length
        Catch ex As Exception

        End Try

End Sub
person Agung    schedule 23.01.2014

Попробуй это:

string myNumber = string.Format("{0:#,0.00}", 1234.500);

(Я видел это в отчетах RDLC)

person Guillermo Gutiérrez    schedule 07.10.2017