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 关注
- 201 浏览
添加回答
举报