【问题标题】:Custom Rounding Ranges using Javascript?使用 Javascript 自定义舍入范围?
【发布时间】:2021-11-28 17:42:09
【问题描述】:

我是零售商的企业培训师,而不是开发人员,但我需要弄清楚一些编码来完成一个项目。感谢您的帮助!

从事一个项目,计算啤酒的销售价格,包括成本、加价、押金和折扣。信息通过 Web 表单在商店级别提交,该数据自动填充为 pdf 表单,然后将该表单发送给买家。此 javascript 正在写入该 pdf 文件中。

我遇到的困难是我需要使用特定规则对最终售价进行四舍五入,以匹配我们的定价结构。规则如下:

  • 如果最后 2 位在 00 和 19 的范围内,则向下舍入到最接近的 99。
  • 如果最后 2 位在 20 和 69 范围内,则向上舍入到最接近的 09。
  • 如果最后 2 位在 70 和 99 的范围内,则舍入到 99。

所以:

  • 5.19 需要向下舍入到 4.99。
  • 21.20 需要四舍五入到 22.09。
  • 102.76 需要四舍五入到 102.99。

此时我只是迷茫和困惑,我已经超出了我的深度。到目前为止,这是我得到的:

var flsellround = this.getField("FLSellCalc").value;
var lasttwo = flsellround.slice(0, -2);

...我不知道从那里去哪里,或者即使使用 .slice 是正确的下一步。包含需要四舍五入的数字的字段是“FLSellCalc”。

希望这一切都说得通。有谁能并且愿意在这里帮助我吗?我一定会很感激的!

【问题讨论】:

  • x.20 舍入到比 x.99 更大的值有点奇怪

标签: javascript pdf acrobat


【解决方案1】:

这是一个功能和一个交互式页面来测试它:

function specialRound(n) {
    if (n < 0) return -specialRound(-n);
    let decimals = n % 1;
    return n - decimals + 
         ( decimals < 0.2 ? -0.01
         : decimals < 0.7 ? 1.09
         : 0.99);
}

let output = document.getElementById("output")
let flsellinput = document.getElementById("FLSellCalc");
flsellinput.addEventListener("input", refresh);

function refresh() {
    let n = +flsellinput.value;
    output.textContent = specialRound(n);
}
refresh();
<input id="FLSellCalc" type="number" value="5.19" step="0.01">

<div id="output"></div>

【讨论】:

  • 谢谢你!我刚刚玩弄了交互式页面,它运行良好。但是,当将其插入 pdf 时,我得到一个“SyntaxError ; before statement 3: at line 4”,我不太确定缺少什么。
  • PDF 语法可能无法涵盖所有​​ JavaScript。也许使用var 而不是let
  • 使用 var 解决了错误。但是,现在“FLSellCalc”中的值 9.16 被更改为 9.06 而不是 8.99。知道为什么会发生这种情况吗?我非常感谢你在这方面的帮助。
  • 我刚刚注意到它正在尝试调用我的文档中没有的“输出”元素。 var output = document.getElementById("output");.那应该连接到哪个领域?我认为 9.06 可能是之前计算留下的,因为在我调整 9.16 值时它没有改变。
  • 嗯,这只是演示的一部分。只需使用价值做你以前做过的事情。您的问题没有显示您如何呈现结果。您需要从我的答案中重用的唯一相关代码是函数。其余的只是在 HTML 页面上进行演示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 2015-05-13
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多