计算工具 · 比价 / AA

性价比比价

多包装/多规格→单价对比

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 53 次使用
按重量比价
商品名称 实付价 规格件数 × 单规格 单位
输入价格与规格即时换算单价 · 全程本地运算不上传
比价规则 / 算法说明

标准单价:把每个商品的规格统一折算到同一标准单位,再算「每标准单位多少钱」。公式 = 实付价 ÷(件数 × 单规格折算到标准单位)。单价越低越划算。

单位换算:1 kg = 1000 g、1 L = 1000 ml、1 打 = 12 个、1 m = 100 cm = 1000 mm。如「1.5kg → 1500g」「12 瓶 × 500ml → 6000ml」自动折算。

促销叠加:勾选「折后实付」可填入打折/满减后的实际到手价,用实付价而非标价算单价——这才是买大包打折 vs 小包谁真划算的关键。

排名:标准单价最低者为最优、高亮置顶;表中「贵 X%」= 该商品相对最优商品的单价贵的百分比;卡片「比最贵省 X%」= 最优相对最贵省下的比例。

提示:单价最低≠一定要买——还要结合实际用量、保质期与是否囤得下。买大包更划算的前提是用得完不浪费。

第一节

关于本工具

About

超市里同一款洗衣液,3kg装标价39.9元,5kg装标价59.9元,哪个更划算?心算单价总在货架前卡壳。这个工具把不同包装、规格的售价统一折算成每克或每毫升单价,直接比出最便宜的那个。输入价格与含量,浏览器本地算完,数据不上传服务器。

使用场景

超市囤货比价

周末去超市前,想囤一提卷纸和两瓶洗衣液。卷纸有 12 卷装 29.9 元和 20 卷装 45 元,洗衣液有 1L 装 19.9 元和 2.5L 装 39.9 元。光看总价容易选错,用本工具分别算出每卷和每升的单价,发现大包装未必更划算——20 卷装每卷 2.25 元,比 12 卷装的 2.49 元便宜,但 2.5L 洗衣液每升 15.96 元,比 1L 装的 19.9 元省了近 4 元。决策有了明确依据,不再被“大包装一定省”的直觉误导。

拼多多凑单凑满减

双十一凑满减,同一款坚果有 200g 小袋装和 500g 家庭装,小袋标价 9.9 元,家庭装 23.8 元。不仔细算会以为家庭装每克更便宜,但用工具一算,小袋每克 0.0495 元,家庭装每克 0.0476 元,确实家庭装略低,但只差 0.0019 元。于是果断买小袋凑单,避免为了省几分钱多囤吃不完的量。

买猫粮对比不同规格

家里猫粮快见底,网上同一品牌有 1.5kg 装 68 元和 6kg 装 228 元。按每公斤算,1.5kg 是 45.33 元,6kg 是 38 元,大包装每公斤省 7.33 元。但猫吃一个月只消耗 2kg,买 6kg 得吃三个月,担心开封后受潮。用工具算出单价后,再结合自家猫的食量,最后选了 1.5kg 装,虽然单价高,但避免了浪费。

买咖啡豆选克单价

常喝的手冲咖啡豆,A 店 227g 卖 88 元,B 店 340g 卖 128 元。光看总价以为 A 店便宜,用工具算出每克单价:A 店 0.388 元,B 店 0.376 元,B 店每克便宜 1.2 分。按每周消耗 50g 算,买 B 店一个月能省 2.4 元,一年省 28.8 元。虽然不多,但长期下来也是一笔小钱,而且 B 店烘焙日期更新鲜,果断下单 B 店。

买婴儿湿巾选单片价

给宝宝囤湿巾,一箱 12 包共 360 片卖 59.9 元,另一箱 8 包共 320 片卖 49.9 元。用工具算单片价格:第一箱每片 0.166 元,第二箱每片 0.156 元,第二箱每片便宜 1 分钱。虽然单片差不大,但按一天用 20 片算,一个月用 600 片,选第二箱每月省 6 元,一年省 72 元。而且第二箱包装小,开封后不易干,更实用。

对比矩阵

维度本工具超市比价 App手工计算
数据输入直接输入价格与克数/数量需搜索商品条码或名称用纸笔记录并手动除
计算速度输入即出单价需等待加载商品详情页每项需单独按计算器
多规格对比一次输入多组,结果并列显示需来回切换商品页面容易记错或漏算
精度与单位自动识别克/毫升/个,保留两位小数部分不显示单价或单位混乱手动换算易出错
离线可用纯浏览器,断网也能算需联网加载商品库完全离线但无辅助
第二节

使用指南

Getting Started

使用步骤

  1. 1在「包装 A」行输入名称(如“24 瓶装”)、总价与数量,单价自动算出并显示在右侧
  2. 2点「添加包装」新增一行,继续输入下一组总价与数量,多行单价同步更新
  3. 3单价列按数值升序排列,最低价行高亮绿色,一眼选出最划算的规格
  4. 4点任意单价数值,自动复制到剪贴板,方便粘贴到购物备注或比价表

输入输出示例

输入输出说明
商品A:包装1,净含量500g,价格15元;包装2,净含量1kg,价格28元包装1单价:30元/kg;包装2单价:28元/kg → 包装2更划算常规:典型的两包装比价场景,验证基本单价计算和比较逻辑
商品B:包装1,净含量100ml,价格9.9元;包装2,净含量200ml,价格19.8元;包装3,净含量500ml,价格49.5元包装1单价:99元/L;包装2单价:99元/L;包装3单价:99元/L → 三者单价相同常规:多包装且单价完全一致,验证工具能正确识别无差异场景
商品C:包装1,净含量0g,价格10元错误:净含量不能为0,请检查输入边界:净含量为0的极端情况,验证工具对无效输入的拦截
商品D:包装1,净含量1kg,价格0元包装1单价:0元/kg → 免费商品,注意是否为促销或输入错误边界:价格为0的免费商品,验证工具能处理零值并给出合理提示
商品E:包装1,净含量10g,价格0.01元包装1单价:1元/kg边界:极小净含量和极低价格,验证小数点精度处理(0.01元/10g = 0.001元/g = 1元/kg)
商品F:包装1,净含量1kg,价格15元;包装2,净含量1.5kg,价格22元;包装3,净含量2kg,价格30元包装1单价:15元/kg;包装2单价:14.67元/kg;包装3单价:15元/kg → 包装2最划算易错:包装2单价不是整数,用户可能误以为大包装一定更便宜(包装3反而贵了)
商品G:包装1,净含量500g,价格10元;包装2,净含量500ml,价格12元无法直接比较:包装1为质量单位(g),包装2为体积单位(ml),需统一密度换算易错:单位不一致(g vs ml),用户常忽略此差异,工具需明确提示不可直接比
商品H:包装1,净含量1kg,价格20元;包装2,净含量1kg,价格20元包装1单价:20元/kg;包装2单价:20元/kg → 两者价格相同易错:完全相同的输入,验证工具不产生重复计算或误报差异

常见错误对照

1.规格单位不一致导致单价对比无效

✗ 错误输入「5 斤装 20 元」和「2 千克装 18 元」直接对比
✓ 修复统一单位:5 斤 = 2500 克,2 千克 = 2000 克;或都换算成千克:2.5 kg vs 2 kg

斤、千克、克、磅混用不换算,单价比较结果完全错误。工具只做数值运算,不自动换算单位,用户必须手动统一。

2.总价含优惠券/满减,未扣除即输入原价

✗ 错误商品标价 50 元,实际用券后 40 元,输入 50 元
✓ 修复输入实际支付金额 40 元

单价对比应基于实际到手价。输入标价会高估单价,导致决策偏差。工具无法自动识别优惠,用户需自行扣除。

3.多包装内含有赠品,未将赠品计入总规格

✗ 错误买一送一,输入「1 瓶 30 元」
✓ 修复输入「2 瓶 30 元」(总规格 = 主品 + 赠品)

赠品是实际可用的商品量,不计入规格会虚高单价。工具只认输入的数字,赠品必须手动合并到规格中。

4.规格单位用「个/只/片」但数量级不同

✗ 错误A 包装 10 片 5 元,B 包装 100 片 40 元,直接对比
✓ 修复统一换算为「每片单价」:A 0.5 元/片,B 0.4 元/片

工具只比较单价数值,不识别「片」与「片」是否同一规格。若 B 的「片」面积更大,需先换算成相同基准(如每克/每毫升)。

5.液体/膏体用体积 vs 重量混输

✗ 错误A 洗面奶 200 ml 30 元,B 洗面奶 200 g 35 元
✓ 修复先查密度:若密度 ≈ 1 g/ml,可近似等同;否则统一为质量或体积再输入

ml 和 g 是不同物理量,密度不同时直接比较无意义。工具不做单位换算,用户必须自行确认可比较性。

6.忽略包装本身重量(净含量 vs 毛重)

✗ 错误罐头毛重 500 g 标价 15 元,输入 500 g
✓ 修复查看净含量(如 425 g),输入 425 g

毛重包含包装、汤汁等不可食用部分,用毛重算单价会低估实际食品成本。应始终使用净含量。

7.将「每件单价」与「每套单价」混淆

✗ 错误6 罐装啤酒 30 元,输入「1 件 30 元」
✓ 修复输入「6 罐 30 元」或「1 件(6 罐)30 元」但需在备注说明

「件」在不同商品中数量定义不同(啤酒 6 罐/12 罐/24 罐)。工具无法理解语义,必须用具体数字描述规格。

第三节

工作原理

How It Works

核心公式

单价 = 总价 ÷ 总净含量

变量说明

  • 总价包装总售价,单位元
  • 总净含量包装内商品总净含量,单位克或毫升
  • 单价每单位净含量的价格

示例

某品牌洗衣液有 500g 装售价 19.9 元,另有 1.2kg 装售价 39.8 元。500g 装单价 = 19.9 ÷ 500 = 0.0398 元/g;1.2kg 装单价 = 39.8 ÷ 1200 ≈ 0.0332 元/g。1.2kg 装单价更低,更划算。

输入商品信息名称·规格·价格解析规格单位提取·归一化计算单价价格÷规格排序展示单价对比示例:A:500g 12元 → 0.024元/gB:1kg 20元 → 0.020元/g排序后 B 更便宜
用户输入 本地处理 输出结果
第四节

开发者集成

For Developers

5 种主流语言实现,复制即用:

from typing import List, Dict def compare_unit_price(items: List[Dict]) -> List[Dict]: """ 输入:[{"name":"A","total_price":29.9,"quantity":500,"unit":"g"}, ...] 输出:添加 unit_price 字段,按单价升序排列 """ if not items: return [] for item in items: item['unit_price'] = round(item['total_price'] / item['quantity'], 4) return sorted(items, key=lambda x: x['unit_price']) # 示例:三款洗衣液,不同规格 products = [ {"name":"蓝月亮 500g", "total_price":29.9, "quantity":500, "unit":"g"}, {"name":"蓝月亮 1kg", "total_price":49.9, "quantity":1000, "unit":"g"}, {"name":"蓝月亮 3kg", "total_price":89.9, "quantity":3000, "unit":"g"}, ] result = compare_unit_price(products) for r in result: print(f"{r['name']}: 总价{r['total_price']}元, 数量{r['quantity']}{r['unit']}, 单价{r['unit_price']}元/{r['unit']}") # 输出: # 蓝月亮 3kg: 总价89.9元, 数量3000g, 单价0.03元/g # 蓝月亮 1kg: 总价49.9元, 数量1000g, 单价0.0499元/g # 蓝月亮 500g: 总价29.9元, 数量500g, 单价0.0598元/g
/** * 多包装单价对比 * @param {Array<{name:string, totalPrice:number, quantity:number, unit:string}>} items * @returns {Array} 按单价升序 */ function compareUnitPrice(items) { if (!items || items.length === 0) return []; return items .map(item => ({ ...item, unitPrice: parseFloat((item.totalPrice / item.quantity).toFixed(4)) })) .sort((a, b) => a.unitPrice - b.unitPrice); } // 示例:三包薯片 const products = [ { name: "乐事原味 75g", totalPrice: 7.5, quantity: 75, unit: "g" }, { name: "乐事原味 104g", totalPrice: 9.9, quantity: 104, unit: "g" }, { name: "乐事原味 200g", totalPrice: 16.8, quantity: 200, unit: "g" }, ]; console.log(compareUnitPrice(products)); // 输出: // [ // { name: '乐事原味 200g', totalPrice: 16.8, quantity: 200, unit: 'g', unitPrice: 0.084 }, // { name: '乐事原味 104g', totalPrice: 9.9, quantity: 104, unit: 'g', unitPrice: 0.0952 }, // { name: '乐事原味 75g', totalPrice: 7.5, quantity: 75, unit: 'g', unitPrice: 0.1 } // ]
package main import ( "fmt" "sort" ) type Product struct { Name string TotalPrice float64 Quantity float64 Unit string UnitPrice float64 } func CompareUnitPrice(items []Product) []Product { if len(items) == 0 { return items } // 计算单价 for i := range items { items[i].UnitPrice = items[i].TotalPrice / items[i].Quantity } // 按单价升序排序 sort.Slice(items, func(i, j int) bool { return items[i].UnitPrice < items[j].UnitPrice }) return items } func main() { products := []Product{ {Name: "农夫山泉 550ml", TotalPrice: 1.5, Quantity: 550, Unit: "ml"}, {Name: "农夫山泉 1.5L", TotalPrice: 3.0, Quantity: 1500, Unit: "ml"}, {Name: "农夫山泉 4L", TotalPrice: 6.5, Quantity: 4000, Unit: "ml"}, } result := CompareUnitPrice(products) for _, p := range result { fmt.Printf("%s: 总价%.1f元, 数量%.0f%s, 单价%.4f元/%s\n", p.Name, p.TotalPrice, p.Quantity, p.Unit, p.UnitPrice, p.Unit) } // 输出: // 农夫山泉 4L: 总价6.5元, 数量4000ml, 单价0.0016元/ml // 农夫山泉 1.5L: 总价3.0元, 数量1500ml, 单价0.0020元/ml // 农夫山泉 550ml: 总价1.5元, 数量550ml, 单价0.0027元/ml }
#!/bin/bash # 使用 awk 计算单价并排序 cat << 'EOF' | awk -F',' ' { name=$1; total=$2; qty=$3; unit=$4 unit_price = total / qty printf "%s,%.2f,%.0f%s,%.4f\n", name, total, qty, unit, unit_price }' | sort -t',' -k5 -n # 输入格式:名称,总价,数量,单位 # 示例数据(三款抽纸) # 清风3层130抽,12.9,130,抽 # 清风3层200抽,19.9,200,抽 # 清风3层300抽,26.9,300,抽 # 输出(按单价升序): # 清风3层300抽,26.90,300抽,0.0897 # 清风3层200抽,19.90,200抽,0.0995 # 清风3层130抽,12.90,130抽,0.0992
interface Product { name: string; totalPrice: number; quantity: number; unit: string; unitPrice?: number; } function compareUnitPrice(items: Product[]): Product[] { if (items.length === 0) return []; return items .map(item => ({ ...item, unitPrice: parseFloat((item.totalPrice / item.quantity).toFixed(4)) })) .sort((a, b) => a.unitPrice! - b.unitPrice!); } // 示例:三款牛奶 const products: Product[] = [ { name: "蒙牛纯牛奶 250ml", totalPrice: 3.5, quantity: 250, unit: "ml" }, { name: "蒙牛纯牛奶 1L", totalPrice: 12.8, quantity: 1000, unit: "ml" }, { name: "蒙牛纯牛奶 2L", totalPrice: 22.5, quantity: 2000, unit: "ml" }, ]; console.log(compareUnitPrice(products)); // 输出: // [ // { name: '蒙牛纯牛奶 2L', totalPrice: 22.5, quantity: 2000, unit: 'ml', unitPrice: 0.0113 }, // { name: '蒙牛纯牛奶 1L', totalPrice: 12.8, quantity: 1000, unit: 'ml', unitPrice: 0.0128 }, // { name: '蒙牛纯牛奶 250ml', totalPrice: 3.5, quantity: 250, unit: 'ml', unitPrice: 0.014 } // ]
第五节

常见问题

Q & A
这个工具能对比不同规格的包装吗?比如一箱 24 瓶和一提 6 瓶的单价?

可以。本工具专门处理多包装、多规格的单价对比。输入时只需分别填写每个包装的总价、数量及单位(如瓶、克、毫升),系统会自动算出每单位的均价,并横向排序。注意单位必须统一——如果 A 包装按“瓶”算、B 按“毫升”算,结果会不准确,建议先把单位换算成同一维度再输入。

为什么我算出来的单价和超市标签上的不一样?

超市标签通常标注的是“每 100 克”或“每 100 毫升”的参考价,而本工具默认按你输入的原始单位(如瓶、袋)计算。如果包装容量不是标准整数(比如一瓶 330ml vs 500ml),单价差异就会明显。建议在输入时将单位统一为“克”或“毫升”,并手动换算好总含量,结果才会与超市口径一致。

我输入了价格和数量,但结果里的“单价”数字特别大,是不是算错了?

检查一下数量和单位的对应关系。常见错误:总价输入的是“元”,但数量填了“箱”而不是拆成“瓶”。比如一箱 24 瓶售价 48 元,正确做法是总价填 48、数量填 24、单位选“瓶”,系统会算出 2 元/瓶;如果数量填 1、单位选“箱”,算出的就是 48 元/箱。本工具完全按你填的数值计算,不自动拆包,所以数量必须是你想对比的最小销售单位。

这个比价工具能算赠品吗?比如买三送一,怎么输入?

可以间接算。对于“买三送一”这类场景,把总价填成你实际支付的金额,数量填成你最终到手的总件数(即买三送一就填 4)。比如原价 12 元 3 瓶,买三送一得 4 瓶,总价 12 元、数量 4 瓶,系统算出的单价就是 3 元/瓶。如果赠品规格不同(比如买大送小),建议先按总含量折算后再输入。

这个工具是纯网页算的,还是会把数据传到服务器?

纯浏览器端计算,不上传任何数据。所有输入的价格、数量、单位都在本地内存中完成运算,关闭页面即消失。无需担心敏感购物数据泄露,也无需网络连接——输入后结果即时显示,无网络延迟。

最多能同时对比多少个包装?我经常要比较七八种规格。

本工具在界面中提供了多个输入行,通常支持同时对比 5-8 种包装规格。如果数量不够,可以分批次对比:先比一轮选出性价比最高的几款,再和剩余选项二次对比。因为计算在本地完成,没有服务器限制,实际能添加的行数取决于页面设计,一般日常对比场景完全够用。

为什么我输入同样的价格和数量,用手机和电脑算出来的结果不一样?

结果应该完全一致,因为计算逻辑在本地执行,与设备无关。如果看到差异,大概率是输入错误:手机键盘小容易误触数字,或单位下拉菜单选错了。建议检查两端的输入值是否完全一致(包括小数点位数)。本工具不依赖设备或浏览器版本,纯 JS 计算,结果由输入唯一决定。

这个工具能算液体的单位价格吗?比如洗衣液按毫升比价。

可以。只需要在“单位”字段选择或输入“毫升”即可。注意总含量要填准确——比如一瓶 2 升的洗衣液,应换算为 2000 毫升再填入数量。如果包装上同时标了毫升和克,建议统一采用毫升,因为液体密度不同,按重量比价会失真。本工具不区分固液体,单位完全由你自定义。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭