2 回答

TA貢獻1873條經驗 獲得超9個贊
我不知道您的邏輯是否正確,但我看到了第一個問題-> 可能來自平等測試:Ekstra_greatnes == whole
很難比較雙倍,
您可以嘗試使用以十進制表示法存儲數字的十進制類型。因此 0.1 將可以精確表示,或者您可以使用(在 microsoft 網站上看到)一個 epsilon 值來比較這兩個值:
// Initialize two doubles with apparently identical values
double double1 = .333333;
double double2 = (double) 1/3;
// Define the tolerance for variation in their values
double difference = Math.Abs(double1 * .00001);
// Compare the values
// The output to the console indicates that the two values are equal
if (Math.Abs(double1 - double2) <= difference)
Console.WriteLine("double1 and double2 are equal.");
else
Console.WriteLine("double1 and double2 are unequal.");

TA貢獻1790條經驗 獲得超9個贊
我建議將分子和分母分開存儲。最好的辦法是Fraction為此目的創建一個新結構。然后你可以使用歐幾里得算法來計算最大公約數。有了這些信息,您就可以格式化您的結果。
string FormatFraction(int numerator, int denominator)
{
int gcd = Gcd(numerator, denominator );
numerator /= gcd;
denominator /= gcd;
return $"{numerator/denominator} {Math.Abs(numerator/denominator)}";
}
int Gcd(int numerator, int denominator)
{
int a = Math.Abs(numerator);
int b = Math.Abs(denominator);
while (b != 0)
{
int temp = b;
b = a % b;
a = temp;
}
return a;
}
此代碼示例假定您正在使用支持字符串插值 ($"<interpolated string>") 的 c# 版本。如果不是,您可以用字符串連接替換格式分數的最后一行。
要添加兩個分數a = a_1 / a_2,b = b_1 / b_2您可以使用簡單的公式a + b = c = c_1 / c_2 = a_1 * b_2 + a_2 * b_1 / a_2 * b_2
- 2 回答
- 0 關注
- 260 瀏覽
添加回答
舉報