2015-08-25 3 views
0

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

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

string number = Convert.ToString(MyDouble); 
if (number.Contains("."))//If there are trailing zeros 
{ 
    //If the numbers after the decimal point (when taken as an integer) equal 0 
    if(Convert.ToInt16(number.Substring(number.IndexOf("."))) == 0) 
    { 
     //Remove anything after the decimal point 
     number = number.Substring(0, number.Length - number.IndexOf(".")); 
    } 
} 
result = Convert.ToDecimal(number); 

Но это не работает. Что с этим не так?

+0

вы можете сделать это просто с помощью пользовательского спецификатор формата (в частности, посмотрите «#» против «0») https://msdn.microsoft.com/en-us/library/0c899ak8(v=vs.110).aspx – hatchet

+1

Я действительно не понимаю, что это пытается выполнить. Как правило, хранить цифровые значения в памяти просто как их числовое (не строковое) представление. А затем просто примените форматировщик строк при отображении их в пользовательском интерфейсе. Почему этот разговор? – David

+0

Можете ли вы удалить весь несвязанный код из своего образца и заменить значения на константы: 'number' является основным кандидатом? –

ответ

0

I нашли решение. Если десятичное (при преобразовании в строку) имеет десятичную точку в нем петлю, пока держит удаления последнего символа все время последний символ является 0.

string number = Convert.ToString(MyDouble); 
if (number.Contains(".")) 
{ 
    while(number.Substring(number.Length - 1) == "0") 
    { 
     number = number.Substring(0, number.Length - 1); 
    } 
} 
result = Convert.ToDecimal(number); 
+0

Действительно плохой вопрос о том, какой вопрос задает (работает ли он для вас или нет) - '% 1' намного лучше извлекает часть после десятичной точки. Кроме того, код, похоже, делает совершенно другую вещь из одного в post-orignal кода пытается удалить нули, если нет ничего, кроме нулей, этот - удаляет нули до первой ненулевой цифры. Вам может потребоваться изменить вопрос для выравнивания обоих. –

+0

@AlexeiLevenkov вы правы. Но я неправильно сформулировал свой вопрос. Я бы хотел, чтобы '2.0200' стал' 2.02', а также '3.00' стал' 3'. –

1

ToString() может сделать трюк. вот как сделать это -

 decimal a = 122.00000m; 
    string trimmed = a.ToString("#.00"); 

и если вы хотите избавиться от всех нулей просто сделать это как this-

decimal a = 122.00000m; 
    string trimmed = a.ToString("#"); 

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

+0

и если _a = 122.01300_? – Steve

+0

Это будет вокруг него – Kapoor

+0

Итак, я обычно делаю все свое округление в расчете и использую ToString, создавая перед отображением значения. – Kapoor

0

Linq делает это довольно легко (если вы не хотите, чтобы преобразовать значение):

using System; 
using System.Linq; 

public class Program 
{ 
    public static void Main() 
    { 
    var a = "10.001000"; 
    var b = a.Reverse().SkipWhile(i => i == '0').Reverse(); 
    var c = new String(b.ToArray()); 

    Console.WriteLine(a); 
    Console.WriteLine(c); 
    } 
} 

Результаты:

10,001000

10,001

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