【问题标题】:copy decimal number value to a compponent将十进制数值复制到组件
【发布时间】:2014-10-10 17:10:58
【问题描述】:
var valT = @TextToNumber("123,43"); 
getComponent("ValRamasa").setValue(valT);

返回值为0.,组件为ValRamasa

<xp:inputText id="ValRamasa" disabled="true">
        <xp:this.converter>
                <xp:convertNumber type="number"
                    maxFractionDigits="2" locale="ro">

               </xp:convertNumber>
        </xp:this.converter>
    < xp:this.value><![CDATA[#{viewScope.field_2[index]}]]></xp:this.value>
</xp:inputText>

转换器设置为我的语言环境,这样:, 是小数分隔符,. 是千位分隔符。

如果我尝试var valT = @TextToNumber("123.43"); => 123,43

为什么我尝试了上面的例子?我有一个输入字段(locale="ro"),用户可以在其中添加一些数字(, 作为小数分隔符),并且我想用这个值做一些数学计算,但我注意到上面的问题发生了。

我的计算(我正在使用重复控件):

    var number = getComponent("inputText11").getValue();
    var procent = getComponent("inputText19").getValue();

        for(var i = 0;i<=index ;i++){
// ****** val - is the 'problem' value **** IF val = integer => it works / IF val = decimal ( with , as decimal separator ) => IT don't works 
        var val = viewScope.field_1[i]; 
/* <xp:inputText id="inputText23">
         <xp:this.value><![CDATA[#{viewScope.field_1[index]}]]></xp:this.value>
                 <xp:this.converter>
                            <xp:convertNumber type="number" locale="ro" maxFractionDigits="2">
                            </xp:convertNumber>
    </xp:inputText>*/

        //val = val.replace(",",".");
        val = @TextToNumber(val);

        //number = Number(number) - Number(val);
        number -= val;
        var garantie = procent*val/100;

        }

        //var valT = @TextToNumber("123.43"); 
        getComponent("ValRamasa").setValue(number);
        getComponent("ValGarantie").setValue(garantie);

【问题讨论】:

  • TextToNumber 在这里肯定不是您的问题。您处理的组件是数字类型,这意味着它作为数字存储 - 无论任何“显示”属性如何。确保您在某处进行了隐式文本转换并尝试将此文本转换回:然后将忽略区域设置并引发错误。发布您的计算代码,因为有错误。 TextToNumber 按设计工作...
  • @TorstenLink 我更新了我的问题
  • “viewScope.field_1”中的值从何而来?我猜,这些变量中有“文本”...

标签: javascript xpages


【解决方案1】:

@TextToNumber 肯定不是您的问题。

您处理的组件是数字类型,这意味着它被存储为数字 - 无论任何“显示”属性。

确定您在某处有隐式文本转换,并尝试将此文本转换回来:

然后区域设置将被忽略并引发错误。

在您发布的计算代码中,也没有明显的错误。

但是:“viewScope.field_1”中的值从何而来?我想,这些变量中有“文本”,导致了这个问题。

【讨论】:

    【解决方案2】:

    @TextToNumber 不遵循任何区域设置,因为这是一种程序语言。要将数字转换为文本,您的数字必须遵循语言准则,在这种情况下,您必须使用冒号。在您的号码中作为小数分隔符。如果您使用此公式,例如在视图列中,您将收到一条错误消息 - 试试吧! 字段的转换器用于转换并接受输入的值。

    【讨论】:

    • 我指示用户使用 , 作为小数点分隔符,考虑到在这个区域我们输入 241,94 而不是 241.94 。这就是我对 type = "number" 的 inputFields 使用 locale = "ro" 的原因。
    • 所以,如果我有一个 locale="ro" 的 inputField,并且用户键入 1546,55(例如)。单击它时有一个按钮,会发生一些数学演算。那么,我需要首先将这个 1.546,55 转换为 1,546.55 并获得数学计算的最后一个值?
    • 不,您不需要任何转换:在内部,这被存储为数字,并以点和逗号呈现给用户...只需对数字进行数学运算,一切都会奏效。
    • 奥利弗和托斯滕是正确的。最大小数位数为 2 且 locale="ro" 的转换器仅表示获取此后端存储的数字,将其转换为字符串并使用“ro”的特定区域设置显示;当您收到输入时,获取提交的值,从“ro”的特定区域设置转换回来,并删除任何超过 2 位小数。除非您使用 getComponent().getSubmittedValue(),否则您不需要为语言环境编写代码。
    • 感谢您的解释。
    猜你喜欢
    • 2021-05-18
    • 2018-05-17
    • 2018-07-26
    • 2015-01-21
    • 1970-01-01
    • 2012-10-08
    • 2013-06-16
    • 1970-01-01
    • 2011-12-31
    相关资源
    最近更新 更多