【问题标题】:ExtJS: How to get decimal number valueExtJS:如何获得十进制数值
【发布时间】:2011-03-20 01:07:28
【问题描述】:

我使用了 numberfield 的 decimalSeparator 属性并将其设置为 ','(逗号)。现在我在将值读取为数字并对其进行数学运算时遇到问题。

我第一次尝试简单:

var v = form.getForm().getValues().myfield / 2

只要我输入逗号,v 就会变成 NaN。

然后我尝试了:

var v = Ext.util.Format.number(form.getForm().getValues().myfield, "0.000,00") / 2

只要输入逗号,v 就会变成 0。

我也尝试过在格式字符串中与 /i 组合,但 id 也没有帮助。

我错过了什么?

【问题讨论】:

    标签: extjs format


    【解决方案1】:

    问题是getValues 无法按预期工作。来自the documentation of getValues(强调我的):

    注意:这些值是从表单内所有启用的 HTML 输入元素中收集的,而不是从 Ext Field 对象中收集的。这意味着所有返回值都是字符串(或字符串数​​组),并且该值可能是字段的 emptyText。

    如果你想确保你有一个十进制值,你将不得不做如下的事情:

    var v_string = form.getForm().getValues().myfield; //get the string
    v_string = v_string.replace(",", "."); //replace ',' with '.'
    var v = (+v_string) / 2; //convert the value to a decimal and divide by 2
    

    编辑

    您也可以尝试使用getFieldValues(即form.getForm().getFieldValues())方法代替getValues 方法。这应该就像您在每个表单字段上都调用了getValues

    【讨论】:

    • 感谢您的回复。这种解决方法效果很好,但是否有更多“全局”解决方案?我有很多十进制数字的网络应用程序,为每个字段编写这种数据检索会很乏味。
    • 我没有得到 getFieldValues,也没有在哪里以及为什么应用它。
    • 很抱歉;它是表单的属性。我的回答说得更清楚了。
    【解决方案2】:

    这应该可行。

    var value = parseFloat("5000,5".replace(",", "."));
    

    【讨论】:

    • Roby,谢谢,这很好,但对我的口味来说仍然不够“一般”。我希望找到“设置并忘记它”的解决方案,例如用户/会话/其他变量的配置选项。我猜这是javascript问题,它不能接受点以外的小数分隔符。
    • 不理想,但已实现:)
    猜你喜欢
    • 2018-06-21
    • 2016-07-18
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2010-12-16
    相关资源
    最近更新 更多