【发布时间】:2015-06-19 11:35:39
【问题描述】:
此脚本检查输入的采购订单金额与行项目计算的金额是否正确。我的问题是它太准确了。由于按重量计价的物品,我需要考虑到小的差异。我需要允许至少 0.10 美元的差异。
还有。一旦触发脚本并通知用户金额不匹配,用户将无法在不刷新页面的情况下提交表单。
<script>
function validateTotals()
{
var amount_incorrect = false;
var u=document.forms["complete_purchase_order"]["total_cost_original"].value;
if (u!=<cfoutput>#NumberFormat(po_total_original, '99999.99')#</cfoutput>)
{
amount_incorrect = true;
}
var v=document.forms["complete_purchase_order"]["total_cost_received"].value;
if (v!=<cfoutput>#NumberFormat(po_total_received,'99999.99')#</cfoutput>)
{
amount_incorrect = true;
}
if (amount_incorrect)
{
alert('Incorrect Original/Received Total');
return false;
}
}
</script>
编辑:把事情弄清楚。用户逐行输入采购订单详细信息。计算行总计,然后计算 PO 总计。
在某些情况下,数量最多为小数点后两位。 示例:数量 8.15 x 价格 4.15 = 33.8225。我四舍五入到最接近的 33.82 美分。
我们如何添加与供应商如何做的细微差别,会给整个采购订单留下大约 1 到 2 美分的差异。最坏的情况,10美分。即使我们收到的订单金额与他们发送的订单金额相差 +/- 10 美分,我也希望完成订单。
目前使用 Coldfusion 解决此问题。我宁愿在检查值之前不提交表单。
<cfif #FORM.total_cost_original# NEQ #po_total_original# OR #FORM.total_cost_received# NEQ #po_total_received#>
<cfif #FORM.total_cost_original# LT (#po_total_original# - .10) OR #FORM.total_cost_original# GT (#po_total_original# + .10)
OR #FORM.total_cost_received# LT (#po_total_received# - .10) OR #FORM.total_cost_received# GT (#po_total_received# + .10)>
这将中止脚本并将用户重定向回表单页面。
【问题讨论】:
-
@Oriol 这是 ColdFusion 语法。看起来可能是正确的。
-
@user3556177 一位智者曾经告诉我,要始终以美分计算货币。这避免了舍入问题。做起来不难,一直都是不错的选择。
-
这里没有真正看到问题。请添加您期望发生的情况、实际发生的情况以及您尝试解决的问题。
-
您的代码没有在
u和v之间进行任何比较。你试过什么?您可以按照前面的建议以美分计算,然后减去 u 和 v 并测试值是否在您期望的范围内。
标签: javascript coldfusion