如何在Stripe发票行项目中准确表示小数数量(如1.25工时)
问题:Stripe发票行如何准确表示小数数量?
我正在使用Stripe API创建发票,根据官方文档,quantity字段为整数类型;在.NET Stripe库中,该字段实际为long类型,均不支持decimal类型。
发票包含一条工时计费行,具体信息如下:
Quantity: 1.25 Rate: $205.00 Total: $256.25
我创建发票行项目的代码如下:
string description = "Labor"; decimal rate = 205.00m; decimal quantity = 1.25m; var invoiceLine = new InvoiceLineOptions { Description = description, PriceData = new InvoiceLinePriceDataOptions { Currency = "usd", UnitAmountDecimal = rate * 100, ProductData = new InvoiceLinePriceDataProductDataOptions { Name = description } }, Quantity = (long?)quantity; };
显然,将quantity强制转换为long类型会丢失小数精度,但目前Stripe似乎仅支持该类型。
已有类似的订阅场景问题,但我的场景并非订阅,且未在InvoiceLineItem中找到Unit字段。
请问是否有遗漏的Stripe配置选项?或该如何实现准确表示小数数量的需求?
解决方案
Stripe发票行的quantity字段确实仅支持整数,没有额外配置可以改为小数类型。要实现准确计费,有两种可行方案:
方案一:调整数量与单价的换算比例
将小数数量放大为整数(比如把1.25小时拆分为125个“0.01小时”单位),同时按比例缩小单价,保证总金额不变。然后在描述中明确标注实际计费单位和费率,让客户清晰理解明细。
修改后的代码示例:
string description = "Labor: 1.25 hours at $205.00/hour"; long quantity = 125; // 对应0.01小时的单位 decimal unitRate = 205.00m / 100m; // 2.05美元/0.01小时 var invoiceLine = new InvoiceLineOptions { Description = description, PriceData = new InvoiceLinePriceDataOptions { Currency = "usd", UnitAmountDecimal = unitRate * 100, // 转成分:205分 ProductData = new InvoiceLinePriceDataProductDataOptions { Name = "Labor" } }, Quantity = quantity };
方案二:直接设置行项目总金额
如果不需要单独维护数量和单价的关联结构,可以跳过PriceData,直接设置行项目的总金额,同时在描述里写明实际的数量和费率,实现起来更简洁。
代码示例:
string description = "Labor: 1.25 hours at $205.00/hour"; decimal totalAmount = 205.00m * 1.25m; // 256.25美元 var invoiceLine = new InvoiceLineOptions { Description = description, AmountDecimal = totalAmount * 100, // 总金额转成分:25625分 Currency = "usd" };
两种方案都能保证计费金额准确,方案一适合需要保留数量、单价结构的场景,方案二更适合仅需展示明细的场景。
内容的提问来源于stack exchange,提问作者lmeasr
相关产品推荐
相关产品推荐

