简体中文

文件·自由发票工具

正确计算发票总额:四舍五入、税金和浮点

· 工作原理

发票 JavaScript 验证

三个计算行收敛于精确的发票总额
原始 ToolAcre 矢量图

您的发票和客户系统之间一美分的不匹配通常来自四舍五入的地方,而不是错误的汇率。这篇文章解释了行级与总级舍入、为什么计算机会出现 0.1 + 0.2 错误,以及如何检查任何生成器的算术。

减少一美分 — 应付账款查询拖延了原本完美的发票

即使数量、价格和费率看起来相同,一个小单位的不匹配也足以使两个系统产生分歧。原因可能是计算顺序、不同的舍入模式或不同的计税基础。通过逐步比较方法来解决它,而不是手动更改最终总数。

发生舍入的地方 - 计算每行税并求和,与先求和并征税一次,以及结果不同的原因

发货模型根据单价乘以数量对每行毛额进行四舍五入,应用并四舍五入行折扣,对行净额进行求和,应用总体折扣,跨应税行分配该折扣,然后根据折扣应税基数计算税金。对每条线路独立征税的系统可能有所不同。

为什么 0.1 + 0.2 不是 0.3 — 二进制浮点数以及整数小单位计算的情况

JavaScript 二进制数无法准确表示每个小数,这就是为什么直接 0.1 加上 0.2 的比较会让人感到惊讶。 Money 模块将十进制文本解析为完整的小单位,并使用 BigInt 有理算术进行乘法、除法和百分比,而不是通过总计携带二进制分数。

舍入模式 - 一半向上、一半偶数和截断,以及为什么选择必须在整个文档中保持一致

模块支持半上、半偶、上、下模式,文档默认为半上。一致性很重要,因为在行、折扣或税收阶段处理不同的关系会改变以后的输入。这些测试运用积极和消极的联系,而不是从一个友好的例子中假设一个方向。

具有零位或三位小数的货币 - 为什么日元和一些海湾货币打破了美分的假设

大纲提到了三位小数的货币,但当前登记仅包含零次要单位货币和两位次要单位货币。该实现仍然从货币元数据而不是假设美分中获得精度,因此整个单位货币不会获得人为的小数位。

工作示例 - 三个计费项目的税率尴尬,双向计算,并解释了分差

对于三个尴尬的行金额,将工具显示的小计、行折扣、发票折扣、应税基数、税金和总额与客户的阶段进行比较。不要仅仅比较最后一个数字:不同的第一阶段确定争议是解析、舍入、分配还是税基选择。

这不包括什么——哪种费率适用于您,或者您客户的系统如何轮换;如果重要的话同意方法

算术无法决定适用哪种税率、某行是否合法应税或另一个会计系统如何舍入。该工具需要税务确认,并且每个文件仅实施一种税率。就方法达成一致仍然是计算器之外的业务和合规问题。

要点 — 根据客户期望的方法检查总计,然后让自由发票工具生成干净的 PDF

将价格保留为输入的十进制文本,选择一种舍入模式,并在系统不一致时比较完整的计算链。自由发票工具提供确定性的小单位算术和可读的 PDF,但根据定义,它不会使客户的不同方法变得不正确。