代码之家  ›  专栏  ›  技术社区  ›  Jamie Keeling

如何正确设置基于货币的文本格式

  •  1
  • Jamie Keeling  · 技术社区  · 14 年前

    在我的应用程序中,执行一个计算,将文本显示到GUI。 应用程序将用户给定的数量乘以一个定义的数字(比如0.85)来创建一个总数(用户输入2,应用程序计算出2 x 0.85)。

    由于显示的数字是一种货币的数字,我正试图正确格式化文本,使其可读性和正确性。

    .ToString("N2");
    

    这刚刚导致两个额外的零被附加到图的末尾。

    问题可以在这里看到:

    Error!

    从ToString中去掉“N2”确实有帮助,但我还剩下68个。

    我知道这并不像听起来那么琐碎,但这是我以前从未想过的事情,它让我思考了很久。

    谢谢!

    3 回复  |  直到 7 年前
        1
  •  1
  •   ChrisF toni    14 年前

    乍一看,你的值(0.68)乘以100得到了68.00,这是正确的。然而,你的数量似乎是80,这应该给你54.40的价值。

    如果你乘以2,那么你应该得到1.70。

        2
  •  2
  •   egrunin    14 年前

    试试这个:

    string.Format("{0:C}", money_value);
    

    .ToString("C");
    

    如果你想全力以赴,你可以这样做:

    string.Format(ui_culture, “{0:C}”, money_value);
    

    ui_culture 与货币相关的文化。

    编辑以添加:

    这种格式的好处是它可以管理所有的标点符号。

    我不确定货币符号是否总是主角。如果是,您可以删除它:

    string.Format(ui_culture, “{0:C}”, money_value).substring(1);
    
        3
  •  0
  •   jrista    14 年前

    您需要使用ToString重载,该重载接受IFormatProvider参数:

    double value = 80;
    string ukCurrency = value.ToString("N2", CultureInfo.CreateSpecificCulture("en-GB"));
    

    我实际上不确定这是否包括货币字符(未测试的示例)。我希望使用“N2”格式的字符串将剥离货币字符…但它可能不会。跳过字符串的第一个字符可能很容易:

    ukCurrency = ukCurrency.Substring(1);