我寫了這個功能,一個double
轉換爲一個分數返回一個字符串:獲取部分從雙
function getFraction(x: double):string;
var h1, h2, k1, k2, y, a, aux : double;
begin
//Setup the values
h1 := 1;
h2 := 0;
k1 := 0;
k2 := 1;
y := x;
//Generates the fraction
repeat
begin
a := floor(y);
aux := h1;
h1 := a*h1+h2;
h2 := aux;
aux := k1;
k1 := a*k1+k2;
k2 := aux;
y := 1/(y-a) ;
end;
until (abs(x-h1/k1) > x*0.000001);
//Output
Result := FloatToStr(h1) + '/' + FloatToStr(k1);
end;
然後,我把它叫做這樣:Edit7.Text := getFraction(x);
其中x
是雙。我使用的拉撒路,我總是有這樣的錯誤:
我相信,上面的代碼中並沒有邏輯的麻煩,因爲它,我已經在上週實施了一個項目中的Java類成爲(code) 。
我錯過了什麼?我的Delphi項目的完整代碼可以找到here。
請問您能否展示真實的代碼。這不是。它無法編譯。然後請顯示導致此浮點錯誤的輸入值。也許你正在將'0'傳遞給函數。你的功能似乎也不是很有用。例如,它將0.5轉換爲「0/1」。 FWIW可能幾乎是不可能的。 – 2014-10-01 21:16:32
在許多方面描述,[如何將浮點數轉換爲可讀的分數?](http://stackoverflow.com/q/95727/576719)。 – 2014-10-01 21:31:02
@LURD謝謝。有趣。 – 2014-10-02 04:42:54