会有更好的方法吗?

时间:2019-09-11 02:15:03

标签: c# double decimal

post.Min.ToString("0.00").Replace(",", ".").Replace(".00", string.Empty)

post.Min是一个双精度字符,例如12,3412,00。预期输出为12.3412

我基本上想将逗号替换为一点,并剪切.00部分(如果有的话)。

我之所以问是因为找不到任何东西,或者因为我不完全知道要搜索什么。这是重复项的很大变化,我根本找不到。请让我知道。

4 个答案:

答案 0 :(得分:4)

最简单的解决方案似乎是使用CultureInfo.InvariantCulture,但我拒绝这样的建议,即它比您在问题中所展示的使用一系列替换更为复杂。

post.Min.ToString("0.##", CultureInfo.InvariantCulture);

#是数字占位符,像这样被描述为docs

  

如果有一个数字,则用相应的数字替换“#”符号;否则,结果字符串中不会出现数字。

Try it online


如果您在很多地方都使用它,这就是为什么要保持简单,那么可以使用扩展方法:

public static class MyExtensions
{
    public static string ToHappyString(this double value)
    {
        return value.ToString("0.##", CultureInfo.InvariantCulture);
    }
}

然后您只需要在使用.ToHappyString()的任何地方调用它即可。例如,post.Min.ToHappyString()

答案 1 :(得分:1)

您可以使用.ToString("0.##")

喜欢

// Considered german culture; May be this is your current culture
CultureInfo culture = new CultureInfo("de"); 
double number1 = Double.Parse("12,34", culture);
double number2 = Double.Parse("12,00", culture);

Console.WriteLine(number1.ToString("0.##"));
Console.WriteLine(number2.ToString("0.##"));

输出:

12.34
12

.Net fiddle

答案 2 :(得分:0)

在MSDN上查看N格式示例的ToString overloads articleStandard Numeric Format Strings文章中也对此进行了介绍。

相关示例:

//       Formatting of 1054.32179:
//          N:                     1,054.32 
//          N0:                    1,054 
//          N1:                    1,054.3 
//          N2:                    1,054.32 
//          N3:                    1,054.322 

要使点(而不是逗号)正确使用,请与N0结合使用:

System.Globalization.CultureInfo customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
customCulture.NumberFormat.NumberDecimalSeparator = ".";
System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;

答案 3 :(得分:0)

double.ToString("0.##")仅在不使用.00时考虑小数位,并且您可以创建自己的数字格式而无需使用文化:

NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalSeparator = ".";

post.Min.ToString("0.##", nfi);