我想将存储在字符串中的分数(例如“2/13”)解析为double。我可以编写解析代码但我唯一的问题是这个代码应该去哪里。如果我可以为此目的使用double.Parse()函数,那将是最好的。有可能吗?如果不能使用double.Parse(),那么编写扩展方法怎么样?或者其他任何方式?
我不想编写Fraction类,因为从fraction的字符串表示到double的转换将是一次操作(当用户第一次输入时),之后将丢弃该分数字符串。
答案 0 :(得分:6)
“......之后,分数字符串将被丢弃。”
您可以使用静态Parse方法使分数类为静态,该方法接受一个字符串并返回一个double。
public static class Fraction
{
public static double Parse(string inValue)
{
// code to parse string
// and return calculated value
}
}
用法:
double myvalue = Fraction.Parse("2/13");
没有任何实例化,没有任何东西被丢弃......
当然,这种方法假设您不关心保留原始值(基于您在问题中提到您希望“丢弃”用于创建分数的初始字符串值)。
如果,otoh,你想“坚持”到那个状态(用于创建分数的两个整数的初始值),那么一个单独的非静态类(在这种情况下实际上结构可能更好)将是一个更好的方式去。然后你不会失去精度,因为使用这个结构的实例的未来算术运算可以被编码为使用存储在这些字段中的两个原始的精确积分状态值,而不是从除法运算得到的稍微不那么精确的舍入双精度值。
答案 1 :(得分:4)
无法使用扩展方法覆盖double.Parse()
本身,但您可以改为创建double.ParseFraction()
扩展方法。这似乎是一种合理的方式。