我正在撰寫一個分數類,我想將雙精度轉換為分數。我通過將雙精度數增加 10 的比例因子來做到這一點,直到它是一個整數,然后將該比例因子作為分數的分母
我的問題是比例因子是一個整數,應該只能是 10 的倍數,例如 100 或 10000,但我得到的值離它很遠。
public static Fraction ToFraction(double number)
{
Fraction fraction = new Fraction();
double tempNumber = number;
int multiplier = 1;
//Makes decimal to whole number and then sets the scaling to be the denominator
//1.03 => 10.3 => 103 thus fraction = 103/100
while (!(tempNumber % 1 == 0))
{
tempNumber *= 10;
multiplier *= 10;
}
fraction.numerator = ((long)tempNumber);
fraction.denominator = multiplier;
return fraction;
}
我試圖用 0.5154812884 做一個分數作為測驗,這意味著我應該得到分數 5,154,812,884 / 10,000,000,000 但它回傳 5,154,812,884/1,410,065,408
我嘗試搜索,但找不到有類似問題的人
我已經包含了一些來自除錯的圖片,其中顯示了輸入雙精度數以及生成的分子(分子)和分母(乘數) 用于測驗的數字
tempNumber 正確但乘數錯誤的結果分數
uj5u.com熱心網友回復:
我相信你的問題是你的分母是一個 32 位整數。這是有道理的,因為 32 位 int 中有 10,000,000,000 次溢位,并將回傳大約 1,410,065,412 的結果。考慮改變這一點。
double tempNumber = number;
long multiplier = 1;
編輯:您收到的分母結果我也能夠在測驗中收到并將乘數(用于確定分母)更改為對我來說很長的固定值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/452576.html
