C#如何很好地将浮动数字格式化为字符串而不必要的小数0?

时间:2016-05-17 06:16:20

标签: c#

我遇到与HERE相同的问题,但我使用的是C#,

如何在C#中完成?

(如果使用Tostring(" F")作为Here,所有浮点数将变为X.XX,也变为0到0.00)

这是一个浮动数字的例子

232.00000000
0.18000000000
1237875192.0
4.5800000000
0.00000000
1.23450000

我想把它们变成:

232
0.18
1237875192
4.58
0
1.2345

修改

(我突然发现我想要做的事情比上面的更复杂但是修改问题已经太晚了,也许我会在另一个问题中提出这个问题......)

4 个答案:

答案 0 :(得分:6)

您可以使用0.############格式。添加尽可能多的#作为您认为可能有的小数位数(小数将四舍五入到那么多位置):

string output = number.ToString("0.############");  

示例小提琴:https://dotnetfiddle.net/jR2KtK

或者您可以使用默认的ToString(),对于美国文化中的给定数字,它应该完全符合您的要求:

string output = number.ToString();  

答案 1 :(得分:1)

使用String.Format()方法从浮点数中删除尾随零。 例如:

        float num = 23.40f;
        Console.WriteLine(string.Format("{0}",num));

打印23.4

答案 2 :(得分:1)

你必须创建自己的扩展方法,链接这个....

  

扩展方法

namespace myExtension
{
    public static class myMath
    {
        public static double myRoundOff(this double input)
        {
            double Output;

            double  AfterPoint = input - Math.Truncate(input);
            double  BeforePoint = input - AfterPoint;

            if ((Decimal)AfterPoint == Decimal.Zero && (Decimal)BeforePoint == Decimal.Zero)
                Output = 0;

            else if ((Decimal)AfterPoint != Decimal.Zero && (Decimal)BeforePoint == Decimal.Zero)
                Output = AfterPoint;

            else if ((Decimal)AfterPoint == Decimal.Zero && (Decimal)BeforePoint != Decimal.Zero)
                Output = BeforePoint;

            else
                Output = AfterPoint + BeforePoint;

            return Output;
        }
    }
}
  

调用您的扩展方法

using myExtension;

namespace yourNameSpace
{
    public partial class YourClass
    {
        public void YourMethod
        {
            double d1 = 232.00000000.myRoundOff();  // ANS -> 232
            double d2 = 0.18000000000.myRoundOff(); // ANS -> 0.18
            double d3 = 1237875192.0.myRoundOff();  // ANS -> 1237875192
            double d4 = 4.5800000000.myRoundOff();  // ANS -> 4.58
            double d5 = 0.00000000.myRoundOff();    // ANS -> 0
            double d6 = 1.23450000.myRoundOff();    // ANS -> 1.2345
        }
    }
}

答案 3 :(得分:-1)

你应该使用int.ToString("G")重载。

阅读本文 - https://msdn.microsoft.com/en-us/library/8wch342y(v=vs.110).aspx