JVM:将BigDecimal作为double存储在数据库中安全吗



我正在开发一个需要货币计算的应用程序,因此我们使用BigDecimal来处理这些数字。

我目前将BigDecimals作为字符串存储在PostgreSQL数据库中。这对我来说最有意义,因为我现在确信,与将数字作为双精度存储在数据库中相比,这些数字不会失去精度。

问题是,我真的不能为此做很多查询(即,在存储为文本的数字上"小于X"是不可能的(

对于必须执行复杂查询的数字,我只需创建一个名为indexedY的新列值(其中Y是原始列的名称(。我有amount(字符串(和indexedMount(double(。我通过在BigDecimal实例上调用toDouble()将amount转换为indexedMount。

我现在只做查询,然后当找到一个表时,我只需将相同数字的字符串版本转换为BigDecimal,并再次执行查询(这次是在提取的对象上(,以确保在double(从应用程序到DB,再回到应用程序(传输过程中没有任何舍入错误

我想知道是否可以避免创建indexedY列这一额外步骤。

因此,我的问题归结为:在(PostgreSQL(表中只将BigDecimal的结果存储为双精度是否安全?

如果需要BigDecimal,我会使用具有所需精度的NUMERIC类型。例如NUMERIC(20,20(

但是,如果您只需要15位精度,那么在数据库中使用双精度可能没问题,在这种情况下,在Java中也应该没问题。

最新更新