烘焙配方缩放
周末在家烤蛋糕,找到一个 6 寸的完美配方,但家里模具是 8 寸的。按面积换算,材料需要乘以约 1.78。面粉、糖、牛奶这些量都变成了带分数的数,比如 3/4 杯面粉要变成 1 又 1/3 杯。用这个工具直接输入 3/4 × 1.78,出结果 1.335,再化简为 1 又 67/200,能精确到小数点后三位,比凭感觉抓一把靠谱太多。
分子分母填整数(负号写分子)。结果自动约分到最简。
支持 + − × ÷ ^ ( )、带分数 1 2/3、小数 0.5;留空则用上方两数。
逐步用最大公约数约分,并给出带分数 / 小数等价形式。
用逗号 / 空格 / 换行分隔,支持 a/b、带分数、小数。取分母 LCM 通分。
整 分子/分母
0.(3)
改任一栏,其余自动同步。小数循环写法:0.(3) 表示 0.333…,0.1(6) 表示 0.1666…。
用逗号 / 空格 / 换行分隔。自动通分对照、升序排列、标出最大值。
批改作业时,发现分数加减结果写成 12/8 而未约分,是判对还是判错?这个工具接受任意两个分数(含整数、带分数),自动完成加减乘除并输出最简分数,同时给出小数近似值。化简逻辑遵循欧几里得算法,结果不依赖后端——所有计算在浏览器内完成,输入不会离开本地。
周末在家烤蛋糕,找到一个 6 寸的完美配方,但家里模具是 8 寸的。按面积换算,材料需要乘以约 1.78。面粉、糖、牛奶这些量都变成了带分数的数,比如 3/4 杯面粉要变成 1 又 1/3 杯。用这个工具直接输入 3/4 × 1.78,出结果 1.335,再化简为 1 又 67/200,能精确到小数点后三位,比凭感觉抓一把靠谱太多。
厨房墙面长 3.6 米,高 2.4 米,用的是 30cm × 60cm 的瓷砖。算墙面面积:3.6 × 2.4 = 8.64 平方米。单片砖面积:0.3 × 0.6 = 0.18 平方米。需要片数:8.64 ÷ 0.18 = 48 片。但师傅说损耗率按 5% 算,48 × 105% = 50.4 片。输入 48 × 105/100,得出 50 又 2/5,直接取整 51 片下单,不用再拿计算器按两遍。
给月季喷药,说明书写 1:800 稀释,但手头只有 5ml 的原液瓶。需要加多少水?5 × 800 = 4000ml,也就是 4 升。可喷壶是 1.5 升的,一次用不完。改成 1.5 升水配多少原液:1500 ÷ 800 = 1.875ml。喷壶刻度只到 ml,1.875 化成 15/8 ml,用 1ml 针管抽 1.875 格,比目测准,不伤花。
孩子做分数加减法练习,答案写 3/4 + 5/6 = 19/12。家长想验证对错,但自己通分算一遍要花几分钟。把 3/4 + 5/6 输进工具,直接出结果 19/12,还能看到化简后的最简分数。如果孩子写成 38/24,工具也能把它约成 19/12,一眼看出答案本质相同,只是没约分。
| 维度 | 本工具 | 计算器 App | 手工计算 |
|---|---|---|---|
| 输入方式 | 直接输入分数算式,如 1/2 + 1/3 | 需先换算为小数或使用专用分数键 | 需通分、找最小公倍数,手写或心算 |
| 输出形式 | 同时显示分数结果、小数结果、是否已化简 | 通常只显示小数或分数,需手动切换 | 结果形式自定,但易出错 |
| 化简能力 | 自动化简为最简分数 | 部分 App 需手动化简或不支持 | 需自行约分,依赖因数分解能力 |
| 运算速度 | 即时出结果 | 秒级,但输入步骤较多 | 数秒到数分钟,取决于复杂度 |
| 错误风险 | 无计算错误,仅受输入格式影响 | 按键误触或小数精度丢失 | 通分、约分、符号等环节易出错 |
| 离线可用 | 浏览器本地运行,无需网络 | 需安装 App,部分需联网 | 完全离线,但需纸笔 |
| 输入 | 输出 | 说明 |
|---|---|---|
| 1/2 + 1/3 | 5/6 | 常规:异分母加法,验证通分与约分正确性 |
| 3/4 - 1/2 | 1/4 | 常规:异分母减法,结果自动化为最简分数 |
| 2/3 × 3/4 | 1/2 | 常规:乘法后约分,验证交叉约分功能 |
| 5/6 ÷ 2/3 | 5/4 | 常规:除法(乘以倒数),结果假分数保留 |
| 0/5 | 0 | 边界:分子为零,输出整数0而非分数 |
| 8/4 | 2 | 边界:可化为整数的假分数,自动输出整数 |
| 3/0 | 错误:分母不能为零 | 易错:分母为0的非法输入,工具应明确报错而非返回无穷大 |
| 1/2 → 小数 | 0.5 | 转换:分数转小数,验证精度与格式 |
1.分数化简时误用除法代替约分
输入 8/12 后直接计算 8÷12=0.6667,不化简输入 8/12 后点击“化简”按钮,得到 2/3分数化简需要分子分母同除以最大公约数(GCD),直接除得到的是小数近似值,丢失了分数精确形式。
2.带分数输入格式错误
输入 1 1/2 写成 11/2输入 1 1/2 写成 1_1/2 或 1+1/2(按工具提示格式)空格在分数输入中常被忽略或解析为分隔符,导致 11/2 被当作假分数 11/2(=5.5),而非 1½。
3.分子分母顺序颠倒
想计算 3÷4,输入 4/3输入 3/4分数 a/b 中 a 是分子(被除数)、b 是分母(除数),顺序颠倒直接改变数值,常见于快速输入时疏忽。
4.负数分数符号位置不统一
输入 -3/-4 或 3/-4输入 -3/4 或 3/4 后手动取负多数分数计算器约定符号放在分子前,分母和分子同时为负会抵消,分母含负号可能导致解析异常。
5.小数转分数时忽略循环节
输入 0.3333 转分数,得到 3333/10000输入 0.3333 后选择“循环小数”模式,或输入 0.3̅(若支持)有限小数 0.3333 与循环小数 0.3̅ 不同,前者精确值为 3333/10000,后者为 1/3。工具若只处理有限小数,结果会近似而非精确。
6.结果未约分直接使用
计算 2/4 + 1/4 = 3/4,但看到 3/4 就以为是最简计算后检查结果是否已自动化简,若未化简则手动点击化简部分工具默认不自动约分,3/4 虽已最简,但若得到 6/8 未化简,后续计算会积累误差或混淆。
7.分母为零未提前检查
输入 5/0 进行加减乘除输入前确认分母不为零,或输入 5/1 等合法值分母为零在数学上无定义,计算器会报错或返回 Infinity,不是有效分数。
a/b + c/d = (a×d + c×b) / (b×d),化简为最简分数
a第一个分数的分子b第一个分数的分母,非零c第二个分数的分子d第二个分数的分母,非零计算 2/3 + 1/4:通分得 (2×4 + 1×3) / (3×4) = (8+3)/12 = 11/12,已是最简分数,结果为 11/12。
6 种主流语言实现,复制即用:
from fractions import Fraction
from math import gcd
# 分数加减乘除与化简
f1 = Fraction(3, 4) # 3/4
f2 = Fraction(1, 6) # 1/6
# 加法
add = f1 + f2 # 11/12
# 减法
sub = f1 - f2 # 7/12
# 乘法
mul = f1 * f2 # 1/8
# 除法
div = f1 / f2 # 9/2
# 化简(Fraction 自动化简)
print(f"{f1} + {f2} = {add}") # 3/4 + 1/6 = 11/12
print(f"{f1} - {f2} = {sub}") # 3/4 - 1/6 = 7/12
print(f"{f1} × {f2} = {mul}") # 3/4 × 1/6 = 1/8
print(f"{f1} ÷ {f2} = {div}") # 3/4 ÷ 1/6 = 9/2
# 分数 → 小数
print(float(Fraction(7, 8))) # 0.875// 分数计算:加减乘除、化简、转小数
// 使用整数分子分母,避免浮点误差
function frac(n, d) {
// 求最大公约数化简
const g = gcd(Math.abs(n), Math.abs(d));
const sign = (d < 0) ? -1 : 1;
return { n: sign * n / g, d: Math.abs(d) / g };
}
function gcd(a, b) {
while (b) { [a, b] = [b, a % b]; }
return a;
}
const a = frac(3, 4); // 3/4
const b = frac(1, 6); // 1/6
// 加法
const add = frac(a.n * b.d + b.n * a.d, a.d * b.d);
// 减法
const sub = frac(a.n * b.d - b.n * a.d, a.d * b.d);
// 乘法
const mul = frac(a.n * b.n, a.d * b.d);
// 除法
const div = frac(a.n * b.d, a.d * b.n);
console.log(`3/4 + 1/6 = ${add.n}/${add.d}`); // 11/12
console.log(`3/4 - 1/6 = ${sub.n}/${sub.d}`); // 7/12
console.log(`3/4 × 1/6 = ${mul.n}/${mul.d}`); // 1/8
console.log(`3/4 ÷ 1/6 = ${div.n}/${div.d}`); // 9/2
// 分数 → 小数
console.log(7/8); // 0.875package main
import (
"fmt"
"math/big"
)
func main() {
// 使用 math/big.Rat 精确表示分数
a := new(big.Rat).SetFrac64(3, 4) // 3/4
b := new(big.Rat).SetFrac64(1, 6) // 1/6
// 加减乘除
add := new(big.Rat).Add(a, b) // 11/12
sub := new(big.Rat).Sub(a, b) // 7/12
mul := new(big.Rat).Mul(a, b) // 1/8
div := new(big.Rat).Quo(a, b) // 9/2
fmt.Printf("%s + %s = %s\n", a, b, add)
fmt.Printf("%s - %s = %s\n", a, b, sub)
fmt.Printf("%s × %s = %s\n", a, b, mul)
fmt.Printf("%s ÷ %s = %s\n", a, b, div)
// 分数 → 小数(浮点近似)
f, _ := new(big.Rat).SetFrac64(7, 8).Float64()
fmt.Println(f) // 0.875
}use num_rational::Rational64;
fn main() {
let a = Rational64::new(3, 4); // 3/4
let b = Rational64::new(1, 6); // 1/6
// 加减乘除(自动化简)
let add = a + b; // 11/12
let sub = a - b; // 7/12
let mul = a * b; // 1/8
let div = a / b; // 9/2
println!("{} + {} = {}", a, b, add);
println!("{} - {} = {}", a, b, sub);
println!("{} × {} = {}", a, b, mul);
println!("{} ÷ {} = {}", a, b, div);
// 分数 → 小数
let f = Rational64::new(7, 8);
println!("{}", f.to_f64().unwrap()); // 0.875
}<?php
// 分数计算:加减乘除、化简、转小数
function frac($n, $d) {
$g = gmp_gcd(gmp_abs($n), gmp_abs($d));
$sign = ($d < 0) ? -1 : 1;
return [$sign * $n / $g, abs($d) / $g];
}
$a = frac(3, 4); // [3, 4]
$b = frac(1, 6); // [1, 6]
// 加法
$add = frac($a[0]*$b[1] + $b[0]*$a[1], $a[1]*$b[1]);
// 减法
$sub = frac($a[0]*$b[1] - $b[0]*$a[1], $a[1]*$b[1]);
// 乘法
$mul = frac($a[0]*$b[0], $a[1]*$b[1]);
// 除法
$div = frac($a[0]*$b[1], $a[1]*$b[0]);
echo "3/4 + 1/6 = {$add[0]}/{$add[1]}\n"; // 11/12
echo "3/4 - 1/6 = {$sub[0]}/{$sub[1]}\n"; // 7/12
echo "3/4 × 1/6 = {$mul[0]}/{$mul[1]}\n"; // 1/8
echo "3/4 ÷ 1/6 = {$div[0]}/{$div[1]}\n"; // 9/2
// 分数 → 小数
echo 7/8 . "\n"; // 0.875require 'rational'
# Ruby 内置 Rational 类,自动化简
a = Rational(3, 4) # 3/4
b = Rational(1, 6) # 1/6
# 加减乘除
add = a + b # 11/12
sub = a - b # 7/12
mul = a * b # 1/8
div = a / b # 9/2
puts "#{a} + #{b} = #{add}"
puts "#{a} - #{b} = #{sub}"
puts "#{a} × #{b} = #{mul}"
puts "#{a} ÷ #{b} = #{div}"
# 分数 → 小数
puts Rational(7, 8).to_f # 0.875本工具默认对每个分数先化简再显示结果,但当你进行加减乘除运算时,结果区会同时给出最简分数和小数两种形式。如果你只想要分数结果,直接看结果区里分数那行就行;如果结果区只显示了小数,说明你输入的表达式里没有运算符号(比如只输了一个分数),工具默认把它当纯小数转换处理。此时你可以改成“1/2 + 0”之类带运算的输入,分数形式就会出来。
这是正常的化简结果。1/3+1/3=2/3,2/3 本身已经最简,所以直接显示。1/3+1/6=2/6+1/6=3/6,3/6 不是最简分数(分子分母有公约数 3),所以工具自动约分成了 1/2。所有分数运算结果都会经过最大公约数化简,保证你看到的是最简形式。如果你想要非化简的中间结果,目前版本不支持保留,但你可以先手动通分再输入。
是的,本工具接受的是分数格式输入,不是小数。你需要用“分子/分母”的形式输入,比如 1/2 代表二分之一,3/4 代表四分之三。如果你手上只有小数,比如 0.75,可以手动换算成 3/4 再输入。工具虽然能把分数结果转成小数,但输入侧只认分数格式,不支持小数直接作为运算符。
本工具使用欧几里得算法(辗转相除法)求分子分母的最大公约数,然后同时除以该公约数实现精确化简。整个过程是精确整数运算,不涉及浮点数、不四舍五入,只要分子分母不超出 JavaScript Number 安全整数范围(±2^53),结果就是绝对精确的。如果数值超出这个范围,建议手动分解后再输入。
不是 bug。0/5 是合法分数,值为 0,工具正常显示。5/0 是除零错误,数学上没有定义(分母不能为 0),所以工具会直接报错提示。这是所有分数计算工具的标准行为,包括计算器、编程语言都一样。如果你遇到分母为 0 的表达式,请先检查输入是否正确。
支持。本工具的输入框接受包含括号、加减乘除符号的混合分数表达式,比如 (1/2+1/3)*2 或 (1/3-1/4)/5 都可以正确计算。运算优先级遵循数学标准:先括号内,再乘除,后加减。如果你发现结果和预期不符,先检查括号是否成对、运算符号是否写全(比如乘号 * 不能省略)。
本工具是纯前端实现,界面自适应手机和电脑屏幕。在手机上输入框和按钮会自动缩放排列,不会遮挡。唯一需要注意的是手机键盘上“/”符号的位置——部分手机键盘需要切换到符号页才能找到斜杠。如果你找不到,可以长按小数点或数字键试试。计算过程全部在浏览器本地完成,无需联网。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。