这个计算器能做什么
找零计算器可以算出现金交易中顾客应该收回多少零钱,并把这笔金额拆分成实际可行、张数最少的纸币和硬币组合。它是一款通用工具,不局限于某一个国家或地区,支持多种常见的世界货币,包括美元(USD,默认选项)、欧元(EUR)、英镑(GBP)、加元(CAD)、澳元(AUD)、墨西哥比索(MXN)、菲律宾比索(PHP)、新西兰元(NZD)和巴西雷亚尔(BRL)。各币种均按其本国流通面额进行拆分。
使用方法
先选择货币和计算模式。在“计算找零”模式下,输入商品价格和顾客实付金额,工具会用“实付金额减去商品价格”算出应找的零钱。在“直接输入找零金额”模式下,你只需填写零钱金额,跳过商品价格的计算。结果会显示应找零钱总额,以及一张明细表,按面额从大到小列出每种纸币和硬币各需要几张(枚),并给出总张(枚)数。
公式与算法
首先算出找零金额:
$$\text{找零} = \text{实付金额} - \text{商品价格}$$(或直接输入的金额)。为了避免浮点数计算误差,系统会先把金额乘以 100 并四舍五入,转换成整数的最小单位(分)。随后采用贪心算法,从最大面额到最小面额依次遍历:每种面额取 \(n = \left\lfloor \frac{r}{d} \right\rfloor\) 个,再从剩余金额中扣除。对于美元、欧元、英镑这类标准(规范型)币制,贪心算法得出的就是真正张(枚)数最少的方案。
实例演示
以美元为例:商品价格 $7.50,顾客实付 $20.00。
$$\text{找零} = \$20.00 - \$7.50 = \$12.50 = 1250 \text{ 分}$$贪心算法的过程:一张 $10(剩 250 分),一张 $2(剩 50 分),一枚 50¢ 硬币(剩 0)。最终结果:1 张 $10、1 张 $2、1 枚 50¢ —— 总共 3 件。
常见问题
为什么要换算成“分”? 用整数的最小单位(分)来计算,可以避免类似 12.499999 这样的误差导致多算出一分钱。
如果我禁用了某个面额会怎样? 贪心拆分仍会在剩余可用的面额中进行;如果无法凑到 0,系统会报告剩余的差额。建议保留最小面额的硬币,以确保能够找出准确的零钱。
贪心算法一定是最优的吗? 对于各国规范型币制,答案是肯定的。但如果使用了不常见的面额组合,或禁用了部分面额,它返回的是一个有效方案,却未必是全局张(枚)数最少的方案。