How can I strip zeros and decimal points off of decimal strings?

故事扮演 提交于 2020-01-13 03:57:13

问题


The following code currently outputs:

12.1
12.100
12.1000
12.00
12
12.0000

How can I change it so it outputs:

12.1
12.1
12.1
12
12
12

Math.Round seems to be the thing, but it makes me define how many decimal places I want, but I want them to be variable as above.

If there is no mathematical way to do it, I'll just strip the zeros and decimal points off the right side of the strings, but would think there is a math way to handle this.

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();

        }
    }
}

回答1:


You can also use decimal's ToString with a parameter:

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

Note: You may have an internationalization issue with your code. The way you have coded it, it will use the culture info from the user's computer, which may have something other than . for the decimal separator. This might cause your program to give incorrect results for users that have . for thousands separator.

If you want to guarantee that the parse method will always behave the same, you could use CultureInfo.InvariantCulture. If you do actually want to parse the string according to the user's culture settings, what you are doing is fine.




回答2:


Use:

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

Learn more about numeric format strings from here...




回答3:


This string format should make your day: "0.#############################". Keep in mind that decimals can have at most 29 significant digits though.

Examples:

? (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



回答4:


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();
}


来源:https://stackoverflow.com/questions/2123151/how-can-i-strip-zeros-and-decimal-points-off-of-decimal-strings

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!