我从网络服务获得以下字符串:
12.95
或
1,200.99
是否可以选择在不操作字符串的情况下将这些值转换为以下值?
12,95
或
1200,99
我尝试了一些文化选项,但没有把它弄好......
我试过了:
//return string.Format( "{0:f2}", Convert.ToDecimal( price ) );
//return string.Format(CultureInfo.GetCultureInfo("de-de"), "{0:0}", price);
NumberFormatInfo format = new System.Globalization.NumberFormatInfo();
format.CurrencyDecimalDigits = 2;
format.CurrencyDecimalSeparator = ",";
format.CurrencyGroupSeparator = "";
return decimal.Parse(price).ToString(format);
答案 0 :(得分:7)
var input = "1,200.99";
//Convert to decimal using US culture (or other culture using . as decimal separator)
decimal value = decimal.Parse(input, CultureInfo.GetCultureInfo("en-US"));
//Convert to string using DE culture (or other culture using , as decimal separator)
string output = value.ToString(CultureInfo.GetCultureInfo("de-DE"));
Console.WriteLine(output); //1200,99
答案 1 :(得分:1)
这样的事情:
double number;
double.TryParse("1,200.99", NumberStyles.Any, CultureInfo.CreateSpecificCulture("en-US"), out number);
var formattedNumber = number.ToString(CultureInfo.CreateSpecificCulture("de-DE"));
然后返回或写出formattedNumber(无论你需要做什么)。
答案 2 :(得分:0)
是和否。首先,你拥有的是一个字符串,因此你不能在尝试时改变它的格式。但是,要实现您想要的,您可以将字符串解析为十进制值,然后使用小数的格式选项以任何合理的方式显示它。
答案 3 :(得分:0)
您可以尝试这样的事情:
String.Format("{0:#,###0}", 0);
或者可能是这样的:
string str = yourNumber.Remove(",").Replace(".",",");
答案 4 :(得分:0)
关闭足够的tronc,
试试这个代码段:
String curStr = "12.95";
Decimal decVal;
var valid = Decimal.TryParse(curStr, out decVal);
if (!valid) throw new Exception("Invalid format.");
String newFormat = decVal.ToString("C", System.Globalization.CultureInfo.CreateSpecificCulture("de-DE"));
在 toString(...)调用中,您可以在“C”后面添加一个数字,以指定应遵循的小数位数。例如“C3”。