C# 字符串在C中以两位小数浮起#
这是将字符串转换为小数点后两位的浮点的正确方法吗C# 字符串在C中以两位小数浮起#,c#,floating-point,decimal,C#,Floating Point,Decimal,这是将字符串转换为小数点后两位的浮点的正确方法吗 string s1 = "9.09"; string s2= "99,09"; string s3= ",09"; ConvertToFloat(s1); ConvertToFloat(s2); ConvertToFloat(s3); private float ConvertToFloat(string value) { float result;
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;
}
如果需要小数位数,正确的方法是返回一个
小数
。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}$");
}
正如约翰指出的,如果在示例数据中有“..”和“”,那么您可以考虑使用“代码>十进制.PARSE(value,CultualFix.xxx < /Cult>)与所允许的区域性。
您得到了“..”和“”的混合。在您的示例数据中。是否希望两者都被视为小数点?从根本上说,这是一个非常混乱的函数,有时返回值的1/100。此外,如果您对小数位数感兴趣,几乎可以肯定,您应该在所有位置使用十进制
,而不是浮点
。我假设/100
是用于pport internationalization-“99,09”
->9909->99.09。我很确定输入“99”
会失败。如果输入是1000.5
?这是转换代码,验证字符串是IsDecimal
的任务。无论如何,创建一个检查它的regexp很容易。