我想將存儲在字符串(例如「2/13」)中的分數解析爲雙精度值。我可以編寫解析代碼,但我唯一的問題是代碼應該放在哪裏。最好的是,如果我可以使用double.Parse()函數來達到這個目的。可以做到嗎?如果不能使用double.Parse(),那麼編寫擴展方法怎麼辦?或者其他方式?解析分數加倍
我不想編寫分數類,因爲從分數的字符串表示形式轉換爲double分配形式將是一次性操作(當用戶首次輸入時),並且之後分數字符串將被丟棄。
我想將存儲在字符串(例如「2/13」)中的分數解析爲雙精度值。我可以編寫解析代碼,但我唯一的問題是代碼應該放在哪裏。最好的是,如果我可以使用double.Parse()函數來達到這個目的。可以做到嗎?如果不能使用double.Parse(),那麼編寫擴展方法怎麼辦?或者其他方式?解析分數加倍
我不想編寫分數類,因爲從分數的字符串表示形式轉換爲double分配形式將是一次性操作(當用戶首次輸入時),並且之後分數字符串將被丟棄。
「...之後,分數字符串將被丟棄。」
您可以使分數類爲靜態的,使用靜態分析方法,該方法接受一個字符串並返回一個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,你要「堅持」到狀態(用於創建分數兩個整數的初始值),然後一個單獨的非靜態類(實際上是一個結構可能是在這種情況下更好)將是更好的方式。然後你就失去了精度,因爲使用這個結構實例的未來算術運算可以被編碼爲使用這些字段中存儲的兩個原始精確積分狀態值,而不是從除法操作中得到的稍微不準確的舍入狀態值。
使用擴展方法無法覆蓋double.Parse()
本身,但您可以改爲創建double.ParseFraction()
擴展方法。這似乎是一個明智的做法。
這樣的方法應該是靜態的,並且您不能創建靜態擴展方法。 – 2009-12-01 18:06:52
啊,的確如此。從來沒有想到... – Thomas 2009-12-02 08:59:46