.net 如果解析分数,如 1/4 ? string s="1/8"double f = double.Parse(s);这样不行,因为是分数,不是浮点数。难道就没有办法解析分数了吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public class Fraction { ulong divisor; ulong dividend; /// <summary> /// 分母 /// </summary> public ulong Divisor { get { return divisor; } set { if (value != 0) divisor = value; else throw new Exception("分母不能为0."); } } /// <summary> /// 分子 /// </summary> public ulong Dividend { get { return dividend; } set { dividend = value; } } public double Value { get { return (double)Dividend / (double)Divisor; } } public override string ToString() { return dividend.ToString() + "/" + divisor.ToString(); } /// <summary> /// 构造函数 /// </summary> public Fraction() { } /// <summary> /// 将string转成Fraction /// </summary> /// <param name="numberString">分数字符串</param> /// <returns> Fraction 实例,如果转换失败,返回null</returns> static public Fraction ConvertToFraction(string numberString) { if (string.IsNullOrEmpty(numberString)) return null; string[] result = numberString.Split('/'); if (result.Length != 2) return null; ulong divisor, dividend; try { divisor = Convert.ToUInt64(result[1]); dividend = Convert.ToUInt64(result[0]); } catch { return null; } if (divisor == 0) return null; Fraction fraction = new Fraction(); fraction.dividend = dividend; fraction.divisor = divisor; return fraction; } /// <summary> /// 加法 /// </summary> /// <param name="fraction"></param> /// <returns></returns> public Fraction Add(Fraction fraction) { Fraction result = new Fraction(); result.Divisor = minCommonMultiple(this.Divisor, fraction.Divisor); result.Dividend = this.Dividend * result.Divisor / this.Divisor + fraction.Dividend * result.Divisor / fraction.Divisor; return Simplify(result); } /// <summary> /// 减法 /// </summary> /// <param name="fraction"></param> /// <returns></returns> public Fraction Subtract(Fraction fraction) { Fraction result = new Fraction(); result.Divisor = minCommonMultiple(this.Divisor, fraction.Divisor); result.Dividend = this.Dividend * result.Divisor / this.Divisor - fraction.Dividend * result.Divisor / fraction.Divisor; return Simplify(result); } /// <summary> /// 乘法 /// </summary> /// <param name="fraction"></param> /// <returns></returns> public Fraction Multiply(Fraction fraction) { Fraction result = new Fraction(); result.Divisor = this.Divisor * fraction.Divisor; result.Dividend = this.Dividend * fraction.Dividend; return Simplify(result); } /// <summary> /// 除法 /// </summary> /// <param name="fraction"></param> /// <returns></returns> public Fraction Divide(Fraction fraction) { Fraction result = new Fraction(); result.Divisor = this.Divisor * fraction.Dividend; result.Dividend = this.Dividend * fraction.Divisor; return Simplify(result); } /// <summary> /// 最小公倍数 /// </summary> /// <param name="num1"></param> /// <param name="num2"></param> /// <returns></returns> private static ulong minCommonMultiple(ulong num1, ulong num2) { ulong mcd = maxCommonDivisor(num1, num2); if (mcd == 1) return num1 * num2; return num1 * num2 / mcd; } /// <summary> /// 最大公约数 /// </summary> /// <param name="num1"></param> /// <param name="num2"></param> /// <returns></returns> private static ulong maxCommonDivisor(ulong num1, ulong num2) { ulong min, max; if (num1 < num2) { min = num1; max = num2; } else { min = num2; max = num1; } double tmp = ((double)max / (double)min); ulong tmp2 = (ulong)tmp; if (tmp == (double)tmp2) { return tmp2; } return 1; } /// <summary> /// 化简 /// </summary> /// <param name="fraction"></param> /// <returns></returns> static public Fraction Simplify(Fraction fraction) { ulong div = maxCommonDivisor(fraction.Divisor, fraction.Dividend); fraction.Divisor /= div; fraction.Dividend /= div; return fraction; } } 分数化小数http://www.cnblogs.com/lsp/articles/623707.html string s="1/8";string[] strArray=s.Split('/');double real=double.Parse(strArray[0])/double.Parse(strArray[1]); string s="1/8"C#字符串中的/在数值型数据里是非法字符。所以格式不正确。string s="1/8"string[] tmp = s.Split('/');double f = double.Parse(tmp[0])/double.Parse(tmp[1]); string[] vtStr=s.Split(new char[]{'/'});double f;if (vtStr==null||vtStr.Length<2){ f=double.Parse(s);}else{ f=double.Parse(vtStr[0])/double.Parse(vtStr[1]);} '/'是除号,不是非法字符,不过5楼的这个写法是错的,s.Split('/');Split没有char作为参数的版本吧?只有char[]参数,所以应该是s.Split(new char[]{'/'}); List中的元素不能修改? xml文件序列化的问题 object 支持多维数组吗?如果不支持,应该如何去实现。 目前在做SOCKET客户端遇到长连接问题 数据库被注入.. 导致数据无法删除 C#如何多个工程使用同一个公共类? 急~~ 具体内容在下面 GridView任务里启用编辑,启用删除?? 一段C#程序代码,老师要求但不会,求助!!! 关于web打印的问题,请各位指点一下。 C#中如何在一个程序里调用其它可执行文件 今天第三贴...问下事务提醒窗口提示 我是个笨蛋求教用VS2008 C#做个系统登录界面做好了怎么链接到菜单
{
ulong divisor;
ulong dividend;
/// <summary>
/// 分母
/// </summary>
public ulong Divisor
{
get
{
return divisor;
}
set
{
if (value != 0)
divisor = value;
else
throw new Exception("分母不能为0.");
}
} /// <summary>
/// 分子
/// </summary>
public ulong Dividend
{
get
{
return dividend;
}
set
{
dividend = value;
} } public double Value
{
get
{
return (double)Dividend / (double)Divisor;
}
} public override string ToString()
{
return dividend.ToString() + "/" + divisor.ToString();
} /// <summary>
/// 构造函数
/// </summary>
public Fraction() { } /// <summary>
/// 将string转成Fraction
/// </summary>
/// <param name="numberString">分数字符串</param>
/// <returns> Fraction 实例,如果转换失败,返回null</returns>
static public Fraction ConvertToFraction(string numberString)
{
if (string.IsNullOrEmpty(numberString))
return null;
string[] result = numberString.Split('/');
if (result.Length != 2)
return null;
ulong divisor, dividend;
try
{
divisor = Convert.ToUInt64(result[1]);
dividend = Convert.ToUInt64(result[0]);
}
catch
{
return null;
}
if (divisor == 0)
return null; Fraction fraction = new Fraction();
fraction.dividend = dividend;
fraction.divisor = divisor;
return fraction; } /// <summary>
/// 加法
/// </summary>
/// <param name="fraction"></param>
/// <returns></returns>
public Fraction Add(Fraction fraction)
{ Fraction result = new Fraction();
result.Divisor = minCommonMultiple(this.Divisor, fraction.Divisor);
result.Dividend = this.Dividend * result.Divisor / this.Divisor + fraction.Dividend * result.Divisor / fraction.Divisor;
return Simplify(result);
} /// <summary>
/// 减法
/// </summary>
/// <param name="fraction"></param>
/// <returns></returns>
public Fraction Subtract(Fraction fraction)
{ Fraction result = new Fraction();
result.Divisor = minCommonMultiple(this.Divisor, fraction.Divisor);
result.Dividend = this.Dividend * result.Divisor / this.Divisor - fraction.Dividend * result.Divisor / fraction.Divisor;
return Simplify(result);
}
/// <summary>
/// 乘法
/// </summary>
/// <param name="fraction"></param>
/// <returns></returns>
public Fraction Multiply(Fraction fraction)
{
Fraction result = new Fraction();
result.Divisor = this.Divisor * fraction.Divisor;
result.Dividend = this.Dividend * fraction.Dividend;
return Simplify(result);
}
/// <summary>
/// 除法
/// </summary>
/// <param name="fraction"></param>
/// <returns></returns>
public Fraction Divide(Fraction fraction)
{
Fraction result = new Fraction();
result.Divisor = this.Divisor * fraction.Dividend;
result.Dividend = this.Dividend * fraction.Divisor;
return Simplify(result);
}
/// <summary>
/// 最小公倍数
/// </summary>
/// <param name="num1"></param>
/// <param name="num2"></param>
/// <returns></returns>
private static ulong minCommonMultiple(ulong num1, ulong num2)
{
ulong mcd = maxCommonDivisor(num1, num2);
if (mcd == 1)
return num1 * num2;
return num1 * num2 / mcd;
} /// <summary>
/// 最大公约数
/// </summary>
/// <param name="num1"></param>
/// <param name="num2"></param>
/// <returns></returns>
private static ulong maxCommonDivisor(ulong num1, ulong num2)
{ ulong min, max;
if (num1 < num2)
{
min = num1;
max = num2;
}
else
{
min = num2;
max = num1;
}
double tmp = ((double)max / (double)min);
ulong tmp2 = (ulong)tmp;
if (tmp == (double)tmp2)
{
return tmp2;
}
return 1;
}
/// <summary>
/// 化简
/// </summary>
/// <param name="fraction"></param>
/// <returns></returns>
static public Fraction Simplify(Fraction fraction)
{
ulong div = maxCommonDivisor(fraction.Divisor, fraction.Dividend);
fraction.Divisor /= div;
fraction.Dividend /= div;
return fraction;
}
}
分数化小数
http://www.cnblogs.com/lsp/articles/623707.html
string[] strArray=s.Split('/');
double real=double.Parse(strArray[0])/double.Parse(strArray[1]);
string s="1/8"
string[] tmp = s.Split('/');
double f = double.Parse(tmp[0])/double.Parse(tmp[1]);
if (vtStr==null||vtStr.Length<2)
{
f=double.Parse(s);
}
else
{
f=double.Parse(vtStr[0])/double.Parse(vtStr[1]);
}
s.Split('/');Split没有char作为参数的版本吧?只有char[]参数,所以应该是s.Split(new char[]{'/'});