✨ Simplify Result
This commit is contained in:
@@ -120,7 +120,7 @@ class SolverService {
|
||||
stepNumber: 3,
|
||||
title: '求解 x',
|
||||
explanation: '两边同时除以 x 的系数 ($newA)。',
|
||||
formula: '\$\$x = \frac{$newD}{$newA}\$\$',
|
||||
formula: '\$\$x = \\frac{$newD}{$newA}\$\$',
|
||||
),
|
||||
);
|
||||
|
||||
@@ -174,6 +174,14 @@ class SolverService {
|
||||
formula: factors.solution,
|
||||
),
|
||||
);
|
||||
steps.add(
|
||||
CalculationStep(
|
||||
stepNumber: 4,
|
||||
title: '化简结果',
|
||||
explanation: '将分数化简到最简形式,并将负号写在分数外面。',
|
||||
formula: factors.solution,
|
||||
),
|
||||
);
|
||||
return CalculationResult(steps: steps, finalAnswer: factors.solution);
|
||||
}
|
||||
}
|
||||
@@ -569,8 +577,8 @@ ${b1}y &= ${c1 - a1 * x}
|
||||
int root2Num = -n ~/ g2;
|
||||
int root2Den = a ~/ g2;
|
||||
|
||||
String sol1 = root1Den == 1 ? '$root1Num' : '\\frac{$root1Num}{$root1Den}';
|
||||
String sol2 = root2Den == 1 ? '$root2Num' : '\\frac{$root2Num}{$root2Den}';
|
||||
String sol1 = _formatFraction(root1Num, root1Den);
|
||||
String sol2 = _formatFraction(root2Num, root2Den);
|
||||
|
||||
// For formula, show (a x + m)(x + n/a) or simplified
|
||||
String f1 = a == 1 ? 'x' : '${a}x';
|
||||
@@ -597,5 +605,26 @@ ${b1}y &= ${c1 - a1 * x}
|
||||
return (formula: formula, solution: solution);
|
||||
}
|
||||
|
||||
String _formatFraction(int num, int den) {
|
||||
if (den == 0) return 'undefined';
|
||||
|
||||
// Handle sign: make numerator positive, put sign outside
|
||||
bool isNegative = (num < 0) != (den < 0);
|
||||
int absNum = num.abs();
|
||||
int absDen = den.abs();
|
||||
|
||||
// Simplify fraction
|
||||
int g = gcd(absNum, absDen);
|
||||
absNum ~/= g;
|
||||
absDen ~/= g;
|
||||
|
||||
if (absDen == 1) {
|
||||
return isNegative ? '-$absNum' : '$absNum';
|
||||
} else {
|
||||
String fraction = '\\frac{$absNum}{$absDen}';
|
||||
return isNegative ? '-$fraction' : fraction;
|
||||
}
|
||||
}
|
||||
|
||||
int gcd(int a, int b) => b == 0 ? a : gcd(b, a % b);
|
||||
}
|
||||
|
Reference in New Issue
Block a user