Как я могу удалить нули и десятичные точки из десятичных строк? - PullRequest
4 голосов
/ 23 января 2010

В настоящее время выводится следующий код:

12.1
12.100
12.1000
12.00
12
12.0000

Как я могу изменить его, чтобы он выводил:

12.1
12.1
12.1
12
12
12

Похоже, Math.Round - это то, что нужно, но оно позволяет мне определить, сколько десятичных знаков я хочу, но я хочу, чтобы они были переменными, как указано выше.

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

using System;
using System.Collections.Generic;

namespace Test8834234
{
    public class Program
    {
        static void Main(string[] args)
        {

            List<string> decimalsAsStrings = new List<string>
            {
                "12.1",
                "12.100",
                "12.1000",
                "12.00",
                "12",
                "12.0000"
            };

            foreach (var decimalAsString in decimalsAsStrings)
            {
                decimal dec = decimal.Parse(decimalAsString);
                Console.WriteLine(dec);
            }

            Console.ReadLine();

        }
    }
}

Ответы [ 4 ]

10 голосов
/ 23 января 2010

Вы также можете использовать десятичную ToString с параметром:

string s = dec.ToString("0.#");

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

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

4 голосов
/ 23 января 2010

Использование:

 Console.WriteLine("{0:0.####}", dec);

Узнайте больше о строках числового формата из здесь ...

1 голос
/ 11 сентября 2011

Этот формат строки должен сделать ваш день: "0. #############################". Имейте в виду, что десятичные дроби могут содержать не более 29 значащих цифр.

Примеры:

? (1000000.00000000000050000000000m).ToString("0.#############################")
-> 1000000.0000000000005

? (1000000.00000000000050000000001m).ToString("0.#############################")
-> 1000000.0000000000005

? (1000000.0000000000005000000001m).ToString("0.#############################")
-> 1000000.0000000000005000000001

? (9223372036854775807.0000000001m).ToString("0.#############################")
-> 9223372036854775807

? (9223372036854775807.000000001m).ToString("0.#############################")
-> 9223372036854775807.000000001
0 голосов
/ 20 июня 2017
public static string RemoveDecimalsFromString(string input)
{
    decimal IndexOfDot = input.IndexOf(".");
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < IndexOfDot; i++)
    {
        sb.Append(input[i]);
    }

    return sb.ToString();
}
...