十进制精度

时间:2011-12-07 12:30:49

标签: axapta x++

在表格中,我有2个字段,一个是Decimal#,另一个是Amount(Real)。

十进制#是枚举,其值为1-5,默认值为5.

要求:

1)每当为Decimal#字段(1-5)选择值时,取决于所选的值

金额字段中不允许使用小数。

Ex1:如果是十进制#= 2

      Amount    = 1.24

Ex2:如果十进制#= 3

      Amount    = 1.521

Ex1:如果是十进制#= 4

      Amount    = 3.0124

Ex1:如果是十进制#= 5

      Amount    = 8.02145

解决方案:我在Decimal#control level上编写了修改后的方法,因此根据为Decimal#选择的值,它将允许Amount字段的多个小数。现在工作得很好。

但如上例所示,网格中所有记录的Amount字段根据输入的最新行中的Decimal#而变化。

平均值,第一行:如果十进制#= 2,则数量= 1.02

第二行:如果十进制#= 3,则数量= 4.623

但是那个时候第一行也是限制为3虽然十进制#= 2。

请在这方面指导我。

1 个答案:

答案 0 :(得分:0)

很抱歉,但是没有可靠的方法在网格控件中使用不同的小数位数。

当前记录的更改可能会影响网格中显示的其他记录。

对于组控件,可以像这样轻松调整小数位数:

 amountCtrl.noOfDecimals(trans.decimalNo);

在网格中,您可以尝试使用带字符串值的编辑方法。您必须自己进行转换。

edit DecimalStr amountStr(boolean set = false, DecimalStr _amountStr = '')
{
    if (set)
    {
        this.Amount = str2num(_amountStr);
    }
    return num2str(this.Amount, 0, this.decimalNo, 1, 0)
}

DecimalStr扩展数据类型应该右对齐。

不幸的是str2num只接受句点作为小数点,并且不接受千位分隔符,因此它不是用于数字转换的“用户友好”函数。您可能必须让自己考虑区域设置。