我需要一个函数来检索格式良好的插入数据库的价格。数据库只接受点作为小数分隔符,不能有千位分隔符。
1,000.25 -> is not valid
1000.25 -> is valid
1000,25 -> is valid (but will be converted ',' to '.')
但是并不总是列有2个小数位,有些列可以有5个小数位。
public static double MoneyToDatabase(string value, int decimal_places)
{
if(string.IsNullOrEmpty(value) == true)
return 0.00;
value = value.Replace(",", "."); // converts the comma into dot
string cardinal = "##";
if(decimal_places > 2)
for(int i = 3; i <= decimal_places; i++)
cardinal += "#";
return Convert.ToDouble(string.Format("{0:0." + cardinal + "}", value));
}
我面临的问题和疑问:
MoneyToDatabase("15,00", 2)
返回1500,应返回15.00 MoneyToDatabase("15,00", 5)
返回1500,应返回15.00000 '0:'
的含义是什么答案 0 :(得分:0)
你可以使用如下转换器:
float.Parse("1,000.25", NumberStyles.AllowThousands);
float.Parse("1000.25", NumberStyles.AllowThousands);
1000,25 you can replace it ;).
请注意,如果您使用不同的文化,请使用不变的文化。
答案 1 :(得分:0)
<强>解决强>
实际问题是CultureInfo,我发现我可以使用“F2”,“F3”,这将检索我想要的小数位。
public static string MoneyToDatabase(string value, int decimal_places)
{
if(string.IsNullOrEmpty(value) == true)
return "0.00";
value = value.Replace(",", ".");
string format = "F" + decimal_places;
double valueAsDouble;
double.TryParse(value, NumberStyles.Number, CultureInfo.InvariantCulture, out valueAsDouble);
// It sets again a comma in the string and must be replaced
return valueAsDouble.ToString(format).Replace(",", ".");
}