如何将字符串转换为小数,并将其格式化为漂亮的输出?

时间:2011-07-21 11:42:46

标签: c#

10 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

答案 2 :(得分:1)

string value;
Decimal number;

value = "16,523,421";
if (!Decimal.TryParse(value,out number))
{
  // set it to something if the "Value" is not a number
  number = -1;
}

答案 3 :(得分:1)

这样的东西?

        string s = "372551.40";
        decimal d;
        if (decimal.TryParse(s, out d))
        {
            var culture = new CultureInfo("de-DE");
            var result = d.ToString("0,0.00", culture);
            // result is "372.551,40"
        }

您也可以使用当前的文化,而不是像我一样使用硬编码。

希望这有帮助,

约翰

答案 4 :(得分:0)

您可以使用.Replace

   string string 1 = "372,551.40";
    string1.Replace(",","");   
    decimalVal = System.Convert.ToDecimal(StringVal);
//shows 372551.40

如果你正在玩大量的数字,你总是可以把它扔进for循环。

您可以在MSDN

上找到更多深度信息和一些示例

答案 5 :(得分:0)

答案 6 :(得分:0)

您提到的显示取决于文化设置。

创建新的CultureInfo并在NumberFormat中,您必须将一些设置(如“{1}}”和“千位分隔符”修改为,,并将其设置为.的{​​{1}}方法。保持小数值的变量。

这应该将值显示为ToString

答案 7 :(得分:0)

带有IFormatProvider的decimal.Parse的重载将允许您解析包含带句点作为小数点符号的数字的字符串(如果标准是您文化中的逗号)。

您可以在结果小数上使用ToString,通过传入适当的IFormatProvider,使用逗号对其进行格式化。 CulturInfo和NumberFormatInfo都实现了IFormatProvider。

您可以使用以下代码获取CultureInfo的实例(此代码适用于澳大利亚的英语)。

new CultureInfo("en-AU")

另请注意,decimal.TryParse是decimal.Parse方法的一个很好的替代方法,如果您期望格式错误的字符串,因为它允许您处理它们而不会引发异常。

以下代码应该为您提供所需的结果(您在其中一条评论中写道,目标系统是SAP,文化可能是德语(de-DE))。

var yourString = "372551.40";
var yourDecimal = decimal.Parse(yourString, CultureInfo.InvariantCulture);
var yourFormattedDecimal = yourDecimal.ToString(new CultureInfo("de-DE"));

答案 8 :(得分:-1)

答案 9 :(得分:-1)

您可以创建自定义NumberFormatInfo

string s = "372551.40";
var dec = decimal.Parse(s, CultureInfo.InvariantCulture);

var nfi = new CultureInfo("en-US", false).NumberFormat;
nfi.NumberGroupSeparator = ".";
nfi.NumberDecimalSeparator = ",";

var res = dec.ToString("n", nfi);
var resDecimal = decimal.Parse(res, nfi);

输出正是您所需要的:372.551,40