C# 更改价格格式无效

C# 更改价格格式无效,c#,asp.net,C#,Asp.net,我有一个价格字符串,其中包含如下数据 22,95 22.95 public static string getFormattedPrice(string value) { double moneyValue; System.Globalization.CultureInfo english = new System.Globalization.CultureInfo("en-US"); Double.TryParse(value, System.Globalizat

我有一个价格字符串,其中包含如下数据

 22,95
22.95
public static string getFormattedPrice(string value)
{
    double moneyValue;
    System.Globalization.CultureInfo english = new System.Globalization.CultureInfo("en-US");
    Double.TryParse(value, System.Globalization.NumberStyles.AllowDecimalPoint, english, out moneyValue);
    return value;
}
此价格为丹麦格式,整数以逗号分隔。我想把它转换成通用格式。意思是我想要一个像这样的出局

 22,95
22.95
public static string getFormattedPrice(string value)
{
    double moneyValue;
    System.Globalization.CultureInfo english = new System.Globalization.CultureInfo("en-US");
    Double.TryParse(value, System.Globalization.NumberStyles.AllowDecimalPoint, english, out moneyValue);
    return value;
}
我试过这样的东西

 22,95
22.95
public static string getFormattedPrice(string value)
{
    double moneyValue;
    System.Globalization.CultureInfo english = new System.Globalization.CultureInfo("en-US");
    Double.TryParse(value, System.Globalization.NumberStyles.AllowDecimalPoint, english, out moneyValue);
    return value;
}
但结果仍然是

 22,95
任何人都知道实现这一点的正确方法。
注意:请不要告诉我我可以使用字符串替换,其中所有逗号都可以替换为点。因为这是一个业务关键数据,我希望使用正确的方法。

首先,您应该使用
十进制
而不是
双精度
来表示财务数据

然后,您尝试使用
en-GB
格式解析字符串,但正如您所说,它是
da-DK
。不要使用英语区域性信息解析数据,而应该在解析后使用它来获取新字符串

更重要的是,返回的值与作为方法参数传递的值完全相同。你为什么期望它能起作用

这一个按预期工作:

public static string getFormattedPrice(string value)
{
    decimal moneyValue;
    var danish = new System.Globalization.CultureInfo("da-DK");
    decimal.TryParse(value, System.Globalization.NumberStyles.AllowDecimalPoint, danish, out moneyValue);
    return moneyValue.ToString(System.Globalization.CultureInfo.InvariantCulture);
}

首先,您应该使用
decimal
而不是
double
来表示财务数据

然后,您尝试使用
en-GB
格式解析字符串,但正如您所说,它是
da-DK
。不要使用英语区域性信息解析数据,而应该在解析后使用它来获取新字符串

更重要的是,返回的值与作为方法参数传递的值完全相同。你为什么期望它能起作用

这一个按预期工作:

public static string getFormattedPrice(string value)
{
    decimal moneyValue;
    var danish = new System.Globalization.CultureInfo("da-DK");
    decimal.TryParse(value, System.Globalization.NumberStyles.AllowDecimalPoint, danish, out moneyValue);
    return moneyValue.ToString(System.Globalization.CultureInfo.InvariantCulture);
}
试试下面的代码

public static string getFormattedPrice(string value)
{
double moneyValue ;
System.Globalization.CultureInfo english = new System.Globalization.CultureInfo("en-US");
Double.TryParse(value, System.Globalization.NumberStyles.AllowDecimalPoint, english, out moneyValue);
return moneyValue.toString();
}
试试下面的代码

public static string getFormattedPrice(string value)
{
double moneyValue ;
System.Globalization.CultureInfo english = new System.Globalization.CultureInfo("en-US");
Double.TryParse(value, System.Globalization.NumberStyles.AllowDecimalPoint, english, out moneyValue);
return moneyValue.toString();
}
试试这个简单的方法

decimal dollarAmount = 123165.4539M;
string text = dollarAmount.ToString("C",Cultures.US);

Console.WriteLine(text);


public static class Cultures
{
    public static readonly CultureInfo US= 
        CultureInfo.ReadOnly(new CultureInfo("en-US"));
}
试试这个简单的方法

decimal dollarAmount = 123165.4539M;
string text = dollarAmount.ToString("C",Cultures.US);

Console.WriteLine(text);


public static class Cultures
{
    public static readonly CultureInfo US= 
        CultureInfo.ReadOnly(new CultureInfo("en-US"));
}

它甚至不编译。无法将类型“
double
”隐式转换为“
string
”,它甚至无法编译。无法将类型“
double
”隐式转换为“
string
”此代码在我的本地系统中运行良好。但当它转到生产服务器时,情况并非如此。服务器采用丹麦文化。这和它有什么关系吗?这意味着传递给方法的字符串不是用丹麦语格式格式化的。由于已设置方法中所有parse/tostring方法的区域性信息实例,因此行为不会因系统设置而有所不同。此代码在我的本地系统中运行良好。但当它转到生产服务器时,情况并非如此。服务器采用丹麦区域性。这和它有什么关系吗?这意味着传递给方法的字符串不是用丹麦语格式格式化的。由于已设置方法中所有parse/tostring方法的区域性信息实例,因此行为不会因系统设置而异。