字符串在C中以两位小数位浮动#
问题描述:
将字符串转换为浮点数并保留两位小数位的方法是否正确?字符串在C中以两位小数位浮动#
string s1 = "9.09";
string s2= "99,09";
string s3= ",09";
ConvertToFloat(s1);
ConvertToFloat(s2);
ConvertToFloat(s3);
private float ConvertToFloat(string value)
{
float result;
decimal de= Convert.ToDecimal(value);
bool IsDecimalFormat = IsDecimal(de);
if (IsDecimalFormat)
{
result =Convert.ToSingle(value);
}
else
{
result = Convert.ToSingle(value)/100;
}
return result;
}
}
private bool IsDecimal(decimal myDec)
{
return (Decimal.Ceiling(myDec) > myDec) ? true : false;
}
答
如果你想要小数位,正确的方法是返回一个decimal
。 A float
不是有小数位数。
答
这是如何我的代码ConvertToFloat
:
private float ConvertToFloat(string value) {
if (!Validate(value))
throw new ArgumentException (value);
string[] v = value.Split(new char[] {'.', ','});
int integer = 0;
if (!string.IsNullOrEmpty(v[0])) {
integer = Convert.ToInt32(v[0]);
}
int dec = Convert.ToInt32(v[1]);
return integer + (dec/100.0f);
}
编辑
我增加了验证方法。
public static bool Validate(string a)
{
return Regex.IsMatch(a, @"^\d*[\.,]\d{2}$");
}
答
正如约翰指出的,如果你有“。”和“,”在你的样本数据中,那么你可以考虑使用decimal.Parse(value, CultureInfo.xxx
与允许的文化。
你已经混合了“。”和“,”在您的示例数据。你希望两者都被当作小数点吗?基本上这是一个非常混乱的功能,有时会返回价值的1/100。另外,如果你对小数位感兴趣,你应该几乎可以肯定地使用`decimal`而不是`float`。 – 2010-11-23 07:24:30
我假设`/ 100`是为了支持国际化 - `“99,09”` - > 9909 - > 99.09。我很确定它输入“99”时失败。 – Kobi 2010-11-23 07:35:26