Dojo数字舍入和NumberTextBox / NumberSpinner的小数位

时间:2015-12-19 18:55:32

标签: dojo rounding decimal-precision

我想让 NumberSpinner 和/或 NumberTextBox 能够做两件事:

  1. 显示精度为 1 小数位的值。
  2. 将这些值舍入 .5
  3. 如果在键入时出现舍入,或者在文本框失去焦点时最小化,我也会喜欢它。如果我尝试输入5.2,它将会转到5.0。如果我输入6.345,它将会转到6.5

    我在places和/或pattern对象上使用roundconstraintseditOptions属性尝试了一系列混合值。什么都行不通。

    备注:

    • 对于NumberSpinner,我将smallDelta设置为0.5,并且在使用微调器箭头时会增加属性。
    • 根据我的理解,places属性将覆盖您设置的任何pattern属性。
    • 我还没有四处奔波。
    • 根据dojo/number的源文档,我应该可以使用基于these guidelines的模式进行舍入。我尝试了各种版本的#.50##但没有成功。它似乎将50添加到输入值而没有舍入。也许我没有得到它?
    • 我看到默认的editOptions pattern值为#.#####但是当文本框失去焦点时,它会舍入到三位小数。那么其他东西是否会覆盖这种模式?
    • 仔细研究一些Dijit代码,round()的{​​{1}}方法似乎没有传递dojo/numberincrement的{​​{1}}参数} 方法。因此,将NumberTextBox.js设置为上述两个配置对象之一的属性什么都不做?

    这是一个基本jsFiddle using NumberSpinner尝试一些舍入和小数精度。

    我的一次尝试:

    filter()

    我确信我可以通过自定义mixin在round<input id="test" type="text" data-dojo-type="dijit/form/NumberSpinner" data-dojo-props=" value: 5, smallDelta: 0.5, constraints: { min: 5, max: 1000, places: 1, round: 5 }, editOptions: { places: 1 } "> NumberTextBox上扩展方法,但优先通过{{1}上的配置选项来实现如果可能的话。

    与很多Dojo一样,有些东西并不像他们看起来那么明显或容易,特别是对于Dijits。在一些Dijits上没有太多的信息,文档喜欢掩饰事物,并且一直是道场的一个巨大弱点。

    任何人都可以帮我澄清这些。我觉得我很亲近,需要有人指出我最喜欢的东西。我只想将一个值舍入到最近的 .5 和/或显示一个舍入的小数位。

1 个答案:

答案 0 :(得分:1)

我认为舍入在dojo中已弃用或至少不受支持,但他们确实需要更新他们的手册。见here。我前一段时间研究了这个问题,并且在使用约束或方面以及前后舍入时无法找到一个好的解决方案。最大的问题是,如果你设置&#34;地点&#34;为1,然后是单个数字输入,如&#34; 7&#34;将解析为NaN,因为它没有1位小数。我最后通过做一些预处理来扩展NumberSpinner(主要是#34;解析&#34;函数)。我知道这不是你想要做的,只是看着道场门票,我不认为在道场的整个前线上有很多动作。