2013-07-07 9 views
9

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

Например:

123M.ToString() ==> resuls in: 123 
123.00M.ToString() ==> resuls in: 123.00 
123.450M.ToString() ==> resuls in: 123.450 

Я ищу для строки форматирования или другого трюка, чтобы избавиться от этих «ненужных» замыкающих нулей, но сохраняя значительные цифры. Итак:

123M.ToString() ==> resuls in: 123 
123.00M.ToString() ==> resuls in: 123 
123.450M.ToString() ==> resuls in: 123.45 

Удаление нули в конце новой строки не является реальным вариантом для меня, потому что тогда я должен выяснить, если строка содержит дробь, и если да, то должны также удалить дополнительный '' или «» в зависимости от культуры и т.д.

+0

Я думаю, что лучший ответ на эту тему [это один] (http://stackoverflow.com/a/7983330/187697) – keyboardP

+0

Возможный дубликат [Удалить конечные нули] (http://stackoverflow.com/questions/4525854/remove-trailing-zeros), который старше и имеет лучшие ответы и комментарии. – Sam

ответ

8

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

myDecimalVariable.toString("G29");

или, используя код выше, при условии, 123.00M ваш десятичное:

123.00M.toString("G29");

Вот объяснение того, как работает краткий пример:

Формат G с номером означает форматирование этого большого количества цифр . Поскольку 29 - это самые значащие цифры, которые могут иметь десятичные числа , это будет эффективно обрезать конечные нули без округления .

+5

См. [Этот комментарий] (http://stackoverflow.com/questions/4525854/remove-trailing-zeros/4525896#comment8733932_4525983) относительно некоторых случаев, когда G29 может работать не так, как ожидалось. – keyboardP

+0

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

+1

Вы не ошибаетесь, но я подумал, что стоит упомянуть, если кто-то другой встретит эту тему. – keyboardP

-1

просто применить спецификатор формата ноль и удалить конечные нули:

string test = (1.23M * 100M).ToString("0"); 
//prints 123. 
string test2 = 123.450M.ToString(".00"); 
//prints 123.45. 
string test3 = 123.450M.ToString().Trim('0'); 
+0

Хорошая попытка ... но я не знаю заранее, какое значение находится внутри десятичной ... –

+0

Обратите внимание, что 'Trim ('0')' приведет к тому, что '0.5m' будет отформатирован как' .5', а не ' 0.5'. – Sam

+0

'Trim ('0')' также форматирует '123.00m' как' 123.' – Sam

Смежные вопросы