标签: bigdecimal

我怎么知道BigDecimal是否无法解析?

我正在从csv导入数据,我需要将一些值转换为BigDecimal,如果无法解析则会引发错误.

从测试开始,BigDecimal("无效数字")返回一个0的BigDecimal.这没关系,但有点凌乱,除了有效值为0 ...

Float("无效数字")的行为不同并抛出异常......

我目前的解决方案是:

class String
  def to_bd
    begin
      Float(self)
    rescue
      raise "Unable to parse: #{self}"
    end
    BigDecimal(self)
  end
end
Run Code Online (Sandbox Code Playgroud)

我完全错过了什么吗?

ruby bigdecimal

7
推荐指数
1
解决办法
1388
查看次数

hibernate返回BigDecimal数据类型而不是long

hibernate命名查询返回数据类型为NUMBER的列的BigDecimal.

select col1 as "col1" from table1 union select col2 as "col1" from table2
Run Code Online (Sandbox Code Playgroud)

在客户端,我希望col1的数据类型是long(原始)我这样做:

<return-scalar column="col1" type="java.lang.Long" />
Run Code Online (Sandbox Code Playgroud)

要么

<return-scalar column="col1" type="long" />
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我得到:

java.lang.ClassCastException: java.math.BigDecimal incompatible with java.lang.Long
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?我怀疑,别名有什么问题?

hibernate bigdecimal long-integer

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

你可以让TextField <BigDecimal>接受这两个,和.作为小数分隔符?

在Wicket应用程序中,我有一个十进制数字文本字段:

 TextField<BigDecimal> f = 
     new TextField<BigDecimal>("f", new PropertyModel<BigDecimal>(model, "share"));
Run Code Online (Sandbox Code Playgroud)

我希望它始终接受两者.(点)和,(逗号)作为小数点分隔符(无论浏览器的语言环境设置如何).

为了显示该值,使用会话的语言环境[在我们的例子中强制为"fi"( - >逗号)],但在这里我对该字段接受的输入感兴趣.

我的问题是,我是否必须将字段更改为TextField<String>,并手动转换为域对象的类型(BigDecimal)?或者是否有某种使用方法TextField<BigDecimal>(允许例如使用Wicket的MinimumValidator或RangeValidator),并且仍然接受两个小数分隔符?

java wicket decimal-point bigdecimal

7
推荐指数
1
解决办法
4688
查看次数

在不使用BigDecimal的情况下将美分转换为美元字符串

我想在Ruby中正确地将美分转换为美元.我将永远不必使用分数.

是否可以正确执行此操作(没有浮点错误)而不必使用BigDecimal

例如,美分到美元

"99" => "0.99"
"324" => "3.24"
Run Code Online (Sandbox Code Playgroud)

以下似乎有效,但它是否正确?

(cents.to_i/100.0).to_s
Run Code Online (Sandbox Code Playgroud)

ruby string floating-point bigdecimal

7
推荐指数
4
解决办法
8852
查看次数

BigDecimal和Money

我研究过并发现,在处理货币时,最好的计算方法是BigDecimal上课.

考虑到这一点,我正在制定一个代码,将各种类型的外币兑换成美元,反之亦然(具体而言,是一种取货币并将其兑换成美元货币的现金登记,计算变更并将此金额返还给外币客户).

截至目前,许多方法都使用double,其中两个int作为参数用于计算美元.

题:

由于我想在计算中使用BigDecimal类,我是否应该将所有涉及双精度计算的方法更改为BigDecimal?

java bigdecimal

7
推荐指数
1
解决办法
2063
查看次数

Clojure BigInt不是Java BigInteger

我正在尝试在Clojure中使用BigDecimals来模拟(如果需要)任意精度数字.当我尝试从未缩放的值和比例因子实例化BigDecimal时,我有一个奇怪的错误:

user=> 1.31M
1.31M (OK)
user=> (class 1.31M)
java.math.BigDecimal (OK)
user=> (.unscaledValue 1.31M)
131 (OK)
user=> (.scale 1.31M)
2 (OK)
user=> (.movePointLeft (BigDecimal. 131) 2)
1.31M (OK)
user=> (BigDecimal. (BigInteger. "131") 2)
1.31M
user=> (BigDecimal. 131N 2) (WRONG!!!)
IllegalArgumentException No matching ctor found for class java.math.BigDecimal  clojure.lang.Reflector.invokeConstructor (Reflector.java:183)
user=> (BigDecimal. (BigInteger. "131") 2)
1.31M
Run Code Online (Sandbox Code Playgroud)

这里的问题是clojure大整数不是java.math.BigInteger对象.偶数(bigint x)不起作用:

user=> (doc bigint)
-------------------------
clojure.core/bigint
([x])
  Coerce to BigInt
nil
Run Code Online (Sandbox Code Playgroud)

顺便说一句,BigInteger构造函数不直接接受数值.我知道我也可以这样做:

user=> (BigDecimal. (BigInteger. (.toByteArray (.unscaledValue 1.31M))) (.scale 1.31M))
1.31M
Run Code Online (Sandbox Code Playgroud)

我的问题是:是否有更惯用的方法直接管理来自Clojure的BigInteger对象?或者我坚持将所有内容都包装在自定义库中,例如:

user=> (defn my-bigint …
Run Code Online (Sandbox Code Playgroud)

clojure biginteger bigdecimal

7
推荐指数
1
解决办法
3037
查看次数

Java中的BigDecimal

我正在考虑使用BigDecimal比较两个四舍五入到两位数的货币值.例如,我希望以下产生0,因为我正在比较应该舍入到0.02的东西和0.02.但它产生-1 !! 有没有正确的方法来做到这一点?

这也适用于较大的数字,如123.45 vs 123.4534 ...当使用"compareTo"时应该产生0.

我尝试过使用数学上下文,但它看起来并不优雅......有正确的方法吗?

BigDecimal spread = new BigDecimal(0.01934);
spread.setScale(2, RoundingMode.HALF_EVEN);
System.out.format("0.0193 ? 0.02 = %d\n", spread.compareTo(new BigDecimal(0.02)));
Run Code Online (Sandbox Code Playgroud)

解决方案是:

BigDecimal spread = new BigDecimal(0.01934).setScale(2, RoundingMode.HALF_EVEN);
BigDecimal loSpread = new BigDecimal(0.02).setScale(2, RoundingMode.HALF_EVEN);
System.out.format("0.0193 ? 0.02 = %d\n", spread.compareTo(loSpread));
Run Code Online (Sandbox Code Playgroud)

java bigdecimal

7
推荐指数
2
解决办法
737
查看次数

java BigDecimal子句失败

我尝试了以下代码.但是使用BigDecimal减去时会得到不同的结果.

    double d1 = 0.1;
    double d2 = 0.1;
    System.out.println("double result: "+ (d2-d1));

    float f1 = 0.1F;
    float f2 = 0.1F;
    System.out.println("float result: "+ (f2-f1));

    BigDecimal b1 = new BigDecimal(0.01);
    BigDecimal b2 = new BigDecimal(0.01);

    b1 = b1.subtract(b2);
    System.out.println("BigDecimal result: "+ b1);
Run Code Online (Sandbox Code Playgroud)

结果:

double result: 0.0
float result: 0.0
BigDecimal result: 0E-59
Run Code Online (Sandbox Code Playgroud)

我还在努力.任何人都可以澄清.

java bigdecimal

7
推荐指数
3
解决办法
9727
查看次数

当我使用BigDecimal时,为什么我的操作不起作用?

我正在尝试使用BigDecimal它,但它总是返回0.我使用时为什么会这样double

public static void main(String[] args) {
    double a = 3376.88;
    BigDecimal b = new BigDecimal(a);
    System.out.println(a-a/1.05);
    System.out.println(b.subtract(b).divide(new BigDecimal(1.05)).doubleValue());
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

java bigdecimal

7
推荐指数
2
解决办法
1474
查看次数

使用ROUND_HALF_UP的BigDecimal 1.0E + 8/100000000为0

有人可以解释为什么第一行的结果为0?

System.out.println((new BigDecimal("1.0E+8")).divide(new BigDecimal(100000000), BigDecimal.ROUND_HALF_UP));
System.out.println((new BigDecimal("1.0E+8")).subtract(BigDecimal.ONE).divide(new BigDecimal(100000000), BigDecimal.ROUND_HALF_UP));

0E+7
1
Run Code Online (Sandbox Code Playgroud)

java rounding bigdecimal divide

7
推荐指数
1
解决办法
1117
查看次数