代码之家  ›  专栏  ›  技术社区  ›  Lars Holdgaard

在任何区域性中不带小数、点或逗号的十进制字符串

  •  1
  • Lars Holdgaard  · 技术社区  · 6 年前

    如果我有一个简单的十进制C#,我想 ToString 它在任何文化中都没有任何点、逗号或小数-我该怎么做?

    我试过了 ToString("N0") 具有 invariantculture 删除小数,但添加“.”用我的语言。

    最好的方法是什么?

    3 回复  |  直到 6 年前
        1
  •  3
  •   Community Marino Di Clemente    4 年前

    你还没有在评论中澄清,但我怀疑你想要这样的东西?

    3.14 -> 3

    5.34543543 -> 5

    如果这是正确的,那么你只需要 decimal int 这会降低精度 只是 整数。

    string someString = ((int)someDecimal).ToString();
    

    如果您发现自己经常重复此逻辑,您可以制作一个简单的扩展方法来保持其干燥:

    public static class DecimalExtensions
    {
        public static string ToIntString(this decimal input)
        {
            return ((int)input).ToString();
        }
    }
    

    简单地这样称呼它:

    string someString = someDecimal.ToIntString();
    

    简单小提琴 here

    编辑

    @汉斯·帕桑特(HansPassant)在评论中给出了最简单的解决方案,我觉得没有记住这一点很傻:

    string someString = someDecimal.ToString("F0", System.Globalization.CultureInfo.InvariantCulture);
    

    这是一个 更好的答案,如果Hans给出了答案,我建议将他们的答案标记为解决方案。

        2
  •  1
  •   Daxtron2 programmergirl90    6 年前

    除了maccettura的答案,该答案只适用于(2^31)-1和(2^31)-1之间的数字。您可以使用:

    decimal.Truncate(decimalToTruncate)
    

    它应该适用于十进制可以存储的所有值。

    Simple fiddle by maccettura

    Decimal.Truncate on MSDN

        3
  •  0
  •   jkmehmi    6 年前

    简单的方法就是使用Convert。ToInt32(“您的价值”),而不是。ToString()。

    所以

    字符串结果=转换。ToInt32(“3.14”)。ToString();

    结果会给你“3”。