标签: bigdecimal

BigDecimal到SQL NUMBER:检查大于精度的值

在我的应用程序中,我将数字处理为BigDecimal并将它们存储为NUMBER(15,5).现在我需要正确检查Java是否BigDecimal值适合列,以便我可以生成正确的错误消息而不执行SQL,捕获异常并验证供应商错误代码.我的数据库是Oracle 10.3,这样的错误导致错误1438.

经过一些谷歌搜索,我发现没有这样的代码,所以我想出了自己的.但是我对这段代码真的不满意......很简单,但同时又简单到足以怀疑它的正确性.我用很多值,随机和边界测试它,它似乎工作.但是由于我对数字非常不满意,我想要一些更强大且经过良好测试的代码.

//no constants for easier reading
public boolean testBigDecimal(BigDecimal value) {
    if (value.scale() > 5)
        return false;
    else if (value.precision() - value.scale() > 15 - 5)
        return false;
    else
        return true;
}
Run Code Online (Sandbox Code Playgroud)

编辑:最近的测试没有超出规模的数字的例外,只是默默地舍入,我不知道没有和我做这些第一次测试之间有什么不同.这样的舍入是不可接受的,因为应用程序是财务的,并且任何舍入/截断必须是显式的(通过BigDecimal方法).除了例外之外,这种测试方法必须确保数字对于期望的精度而言不是太大,即使是非有效数字.对于迟到的澄清感到抱歉.

谢谢你的时间.


我仍然对这个问题感到好奇.我的代码仍在运行,我没有得到正确或失败情况的一些"证据",或者这种测试的一些标准代码.

所以,我正在给它一个赏金,希望得到任何这些.

java oracle bigdecimal oracle10g ora-01438

9
推荐指数
2
解决办法
8621
查看次数

Scala 2.9中的标准十进制类型是什么?

什么是Scala与C#的类比decimal?我应该使用java.math.BigDecimal还是Scala中有自己的标准类型?

scala decimal bigdecimal

9
推荐指数
1
解决办法
5360
查看次数

Hibernate - Custom Dialect的BigDecimal列映射

我正在使用Hibernate作为我们的对象关系映射,使用一个隐藏数据库的自定义方言.

我从这个数据库中检索的实体有一列:

    @Column(name = "GROSS_WEIGHT", precision = 9, scale = 3)
    private BigDecimal grossWeight;
Run Code Online (Sandbox Code Playgroud)

数据库将此列定义为数字,精度为9,标度为3.

我可以看到Hibernate生成的SQL来检索数据,当我使用数据库查询工具执行相同的Query时,它会返回GROSS_WEIGHT列的"9.68".

但是,在由Hibernate检索的实体中,'grossWeight'字段包含值'10',其中scale0和precision2 为0 !

在我正在使用的自定义方言类中,我尝试重写以下列类型:

        registerColumnType( Types.DECIMAL, "numeric($p,$s)" );
        registerColumnType( Types.DOUBLE, "numeric($p,$s)" );
        registerColumnType( Types.NUMERIC, "numeric($p,$s)" );
Run Code Online (Sandbox Code Playgroud)

但它仍然只返回(舍入的)整数.

这在我们使用Postgres方言从Postgres检索对象的应用程序的其他地方有效.

知道我应该在方言中做什么,所以我可以让Hibernate正确设置检索到的BigDecimal的精度/比例?

java hibernate jpa bigdecimal hibernate-mapping

9
推荐指数
1
解决办法
4638
查看次数

找到数字小数点前的最后两位数(4 + sqrt(11))^ n

我正在做一个问题,我必须在数字
[4 + sqrt(11)] n的小数点前找到最后两位数.

例如,当 n = 4时,[4 + sqrt(11)] 4 = 2865.78190 ......答案是65.其中n可以从2 <= n <= 10 9变化.

我的解决方案 - 我试图构建一个平方根函数,它计算11的sqrt,其精度等于用户输入的n的值.

BigDecimal在Java中使用过以避免溢出问题.

public class MathGenius {

    public static void main(String[] args) {

        Scanner reader = new Scanner(System.in);
        long a = 0;
        try {
            a = reader.nextInt();
        } catch (Exception e) {
            System.out.println("Please enter a integer value");
            System.exit(0);
        }

        // Setting precision for square root 0f 11. str contain string like 0.00001
        StringBuffer str …
Run Code Online (Sandbox Code Playgroud)

java precision performance bigdecimal

9
推荐指数
1
解决办法
1006
查看次数

检查BigDecimal值是否在范围内

我有BiGDecimal price,我需要检查它是否在某个范围内.例如应该是3个条件:

if (price >= 0 and price <=500) {
   ....
} else if (price >=500 && price <=1000) {
   ....
} else if (price > 1000) {
   ....
}
Run Code Online (Sandbox Code Playgroud)

如何使用BigDecimal类型正确执行.

java bigdecimal

9
推荐指数
4
解决办法
2万
查看次数

BigDecimal stripTrailingZeros不适用于零

我在代码中遇到了奇怪的错误.

它涉及到

new BigDecimal("1.2300").stripTrailingZeros() 
Run Code Online (Sandbox Code Playgroud)

返回1.23(正确)

new BigDecimal("0.0000").stripTrailingZeros() 
Run Code Online (Sandbox Code Playgroud)

返回0.0000(奇怪),因此没有任何反应

为什么?

怎么解决?

java bigdecimal

9
推荐指数
1
解决办法
1513
查看次数

如何索引Lucene 3.0.1中的BigDecimal值

我有一些BigDecimal值,应该为搜索索引.Lucene有NumericField,但它只有long,double,float和int的setter.我可以将它存储为String但我不会受益于NumericRangeQuery.

你如何存储你的BigDecimals?分享的最佳做法是什么?

java lucene indexing search-engine bigdecimal

8
推荐指数
1
解决办法
3009
查看次数

任意大数字的BCD数学库?

我正在寻找Delphi Data.FmtBcd库的替代品,因为我只是达到它可以表示的最大十进制数字的限制,并且程序终止于EBcdOverflowException.对于好奇,我正在计算算术系列成员,需要处理非常大的数字 - 数十万个位置并不是那么罕见.并在合理的时间内获得结果.我确实将部分代码重写为Python 3.2用于测试目的,并且计算速度足以满足Delphi的要求.

有关此类库的一些建议,最好是免费还是开源?

delphi biginteger bigdecimal bcd

8
推荐指数
1
解决办法
1996
查看次数

BigDecimal在Java/Android上的BigDecimal功能

我有一个简单的BigDecimal,我想为另一个BigDecimal供电,例如11.11 ^ -1.54.在Java/Android中最好的方法是什么?我不喜欢转换为双打的想法,因为它是用于医疗应用,所以我很欣赏最大的可能性.到目前为止,我已经查看了来自Google Guava的http://commons.apache.org/math/和数学内容,但一无所获.

编辑:整个计算很复杂,并且有很多这样的操作.我需要尽可能多的精度.

java android bigdecimal

8
推荐指数
2
解决办法
7838
查看次数

rspec大十进制匹配器

-:total_cost_with_tax => #<BigDecimal:7fda9d17aaf0,'0.105225E4',18(45)>,
-:total_cost_without_tax => #<BigDecimal:7fda9d17b450,'0.972E3',9(36)>,
-:total_last_installment_amount => #<BigDecimal:7fda9d17b978,'0.8011E2',18(45)>,
-:total_monthly_installment_amount => #<BigDecimal:7fda9d17abb8,'0.8011E2',18(45)>,
-:total_tax => #<BigDecimal:7fda9d17b068,'0.8025E2',18(45)>,

+:total_cost_with_tax => #<BigDecimal:7fda9d0184c8,'0.105225E4',18(36)>,
+:total_cost_without_tax => #<BigDecimal:7fda91ff2b48,'0.972E3',9(27)>,
+:total_last_installment_amount => #<BigDecimal:7fda91fee548,'0.8011E2',18(36)>,
+:total_monthly_installment_amount => #<BigDecimal:7fda91fe72c0,'0.8011E2',18(36)>,
+:total_tax => #<BigDecimal:7fda9d00a2b0,'0.8025E2',18(36)>,
Run Code Online (Sandbox Code Playgroud)

因此,在我的一些测试中,这些都是散落的...... rspec 2,rails 3.我正在比较使用的哈希进行.should eq()比较.我似乎无法使咒语正确.看起来它是一个精确的东西,这似乎很傻.

ruby rspec ruby-on-rails bigdecimal

8
推荐指数
1
解决办法
5944
查看次数