标签: bigdecimal

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万
查看次数

如何获得唯一确定给定double的"最短"BigDecimal

基本上,我很好奇如何在new BigDecimal(Double.toString(d))不经历创建字符串的过程中掌握.

对文件Double.toString是相当复杂的(和有趣).据我了解,该方法实际上并不返回给定double实际表示的数字的字符串表示,而是唯一标识给定double的(near by)最短实数的字符串表示.

(我实际上并不需要这个.如果我这样做,我可能会通过一个字符串.我只是好奇这个算法找到这个"短"实数,唯一确定给定的双值.)

(这是关于这个问题的后续问题.)

java double bigdecimal

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

你可以让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
查看次数

在Java中将BigDecimal转换为String时如何删除无效的零?

java.math.BigDecimal.toString()可以返回类似"0.888200000"的内容.如果我想要"0.8882"而我可以做的最好的事情是什么?我永远不会知道(除非我为每个特定情况计算它)整数的长度(从左到右)部分,该值可以是123.8882,就像123456.88一样容易.

java tostring bigdecimal

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

BigDecimal和Money

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

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

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

题:

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

java bigdecimal

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

格式化字符串以删除科学记数法 - Java

我有以下代码,它分割一串数字(用空格分隔),然后创建一个浮点数组:

//Split the string and then build a float array with the values.
String[] tabOfFloatString = value.split(" ");
int length = tabOfFloatString.length;
System.out.println("Length of float string is" + length);
float[] floatsArray = new float[length];
for (int l=0; l<length; l++) {
float res = Float.parseFloat(tabOfFloatString[l]);
    System.out.println("Float is " + res);
    floatsArray[l]=res;
}
Run Code Online (Sandbox Code Playgroud)

问题是字符串中的某些值是用科学记数法格式化的 - 例如它们读取-3.04567E-8.

我想要做的是最终得到一个不包含E号的浮点数.

我一直在阅读这个线程,这表明我可以使用BigDecimal,但是无法让它工作 - 这是最好的方法还是我应该尝试别的?如何在Java中将字符串3.0103E-7转换为0.00000030103?

java string floating-point bigdecimal

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

在除法后获取数字中的所有小数位

我目前正在使用BigDecimal,它给了我更多的小数,但还不足以满足我的目的.我需要能够一直到10 ^ 6数字.这是我目前的代码

BigDecimal num = new BigDecimal(103993/33102.0);
    pw.println(num.toString());
Run Code Online (Sandbox Code Playgroud)

它输出3.14159265301190249175533608649857342243194580078125

其中数字实际上有更多的小数:http://www.wolframalpha.com/input/?i = 103993%2F33102

java formatting bigdecimal

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

BigDecimal.movePointRight()挂起非常大的数字

以下程序冻结,我无法弄清楚原因.

import java.math.*;

public class BigDec {
  public static BigDecimal exp(double z) {
       // Find e^z = e^intPart * e^fracPart.
       return new BigDecimal(Math.E).pow((int)z, MathContext.DECIMAL128).
           multiply(new BigDecimal(Math.exp(z-(int)z)), MathContext.DECIMAL128);
   }

   public static void main(String[] args) {
       // This works OK:
       BigDecimal x = new BigDecimal(3E200);
       System.out.println("x=" + x);
       System.out.println("x.movePointRight(1)=" + x.movePointRight(1));

       // This does not:
       x = exp(123456789);
       System.out.println("x=" + x);
       System.out.println("x.movePointRight(1)=" + x.movePointRight(1)); //hangs
   }
}
Run Code Online (Sandbox Code Playgroud)

出于目前的目的,第一种方法只是创建一个非常大的BigDecimal.(细节:它找到了z的力量,即使它太大而不是双倍.我很确定这种方法是正确的,尽管MathContexts可能不是最好的地方.)

我知道e ^ 123456789非常大,但我确实想要使用这样的数字.非常感谢任何答案.

java bigdecimal

6
推荐指数
1
解决办法
555
查看次数

将BigDecimal乘以100哪种方法更好?

在使用Java BigDecimal时,我有一个问题。当我要将100乘以BigDecimal的对象时,哪种方法会更好。

  1. 乘以10两次;
  2. movePointRight(2);
  3. scaleByPowerOfTen(2);
  4. 还有其他方法吗?请告诉我是否有。

顺便说一句,它将用于商业计算,所以我考虑的是精度而不是速度。

java bigdecimal

6
推荐指数
1
解决办法
5349
查看次数