数量参考类型等

时间:2013-11-19 10:02:06

标签: bigdecimal adempiere

过去几天我一直在研究ADempiere,我对此感到困惑。

我在数据库表上创建了一个名为Other_Number的新列,其引用类型为Quantity。最大长度为20。

在我的Java源代码中,我使用了BigDecimal。

现在,每当我尝试在Other_Number字段上输入正好20个数字时,最后4个数字将被舍入。假如我输入12345678901234567891.当我尝试保存时,它变为12345678901234567000。

除此之外。保存在数据库(PSQL)上的所有记录都附加了“.000000000000”(即12个零)。

现在我需要做一些事情,这样当我输入20位数时,最后4位数字不会被舍入。

此外,我需要摆脱“.000000000000”

你能告诉我为什么会这样吗?

4 个答案:

答案 0 :(得分:2)

如果它实际上不是您想要的数字,而是某种仅包含数字的引用字段,请将应用程序字典中的定义更改为:

Reference: String 
Length: 20 
Value Format: 00000000000000000000 (i.e. 20 Zeros!)

这将强制输入只是数字(即字母字符将被忽略!)因为它是一个字符串,所以不会有舍入String with 20 numeric digits

答案 1 :(得分:2)

ADempiere作为财务ERP软件,在处理财务金额方面至关重要。在数据库中,确切的BigDecimal值必须保持其数据完整性。精度和舍入在代码中尽可能完美。作为已建立的着名项目Compiere ERP的一部分,iDempiere和Openbravo也来自这里,这样的财务金额管理已经得到很好的定义和解决。 也许您需要在适当的窗口http://wiki.idempiere.org/en/Currency_%28Window_ID-115%29 enter image description here

中设置精度

答案 2 :(得分:1)

Adempiere将支持最多14(+5)位(数万亿)数量/业务量(美元货币)。

What currency you are using, is it possible to use this much amount/quantity in ERP system ?

如果您想更改逻辑,则可以在 DispalyType.java 类的 getNumberFormat 方法中更改逻辑。

业务情景是什么?

答案 3 :(得分:1)

在Adempiere中,java代码“setScale”方法用于舍入值

示例:

    BigDecimal len= value           
    len= len.setScale(2,4);
    setLength(len);