在java中有没有替换long double?

时间:2012-01-06 06:53:25

标签: java c

我正在阅读C中的数据类型。我发现long double的范围大于java中double的范围。对于非常庞大的数字,我们可以在C中使用long double。如果我想在java中存储相同的数字,我们必须做什么?我们可以使用哪种数据类型?

  

java中的double需要8个字节(64位)IEEE 754.它涵盖范围   4.94065645841246544e-324d至1.79769313486231570e + 308d(正面或负面)。

longdouble in c takes 10 bytes (80 bits)

任何人都可以告诉我在java中有没有替换longdouble

5 个答案:

答案 0 :(得分:10)

虽然不是替代品,但您可以使用java.lang.math.BigDecimal。您可以大致存储数十亿个数字,直到内存不足为止。它是一个任意的精度等级,它会变得你想要的一样大,直到你的计算机内存不足。

根据BigDecimal的文档:

  

不可变,任意精度的带符号十进制数。一个BigDecimal   由任意精度整数非标定值和a组成   非负32位整数标度,表示数量   小数点右边的数字。代表的数字   BigDecimal是(unscaledValue / 10scale)。 BigDecimal提供   基本算术,比例操作,比较,   散列和格式转换。

答案 1 :(得分:3)

Java中没有直接的替代品。

您可以将BigDecimal用于此目的。

你应该明白,你的双重值越大,你在数学运算中使用它的精度就越大。 BigDecimal可以帮助您了解这个问题。

以下是BigDecimal的代码示例:

String decimalString = "1423545135143513.523";
BigDecimal decimal = new BigDecimal(decimalString);

By this link你可以找到许多使用BigDecimal类的例子。

答案 2 :(得分:2)

对于原始类型,double和float都没有,它们处理浮点。

但是,BigDecimal可能就是你要找的东西。

答案 3 :(得分:1)

BigDecimal状态的文档:

  

添加(BigDecimal augend)             返回一个BigDecimal,其值为(this + augend),其缩放比例为max(this.scale(),augend.scale())。

import java.math.BigDecimal;

    public class AddTwoBigNumbers{
      public static void main(String[] args) {
      BigDecimal num1, num2;
      num1 = new BigDecimal(50.00035);
      num2 = new BigDecimal(100.0025);
      Sum(num1, num2);
      }

      public static void Sum(BigDecimal val1, BigDecimal val2){
      BigDecimal sum = val1.add(val2);
      System.out.println("Sum of two BigDecimal numbers: "+ sum);
      }
    } 

答案 4 :(得分:0)

不,但您可以使用Java Native Interface调用使用long double类型执行计算的本机方法。然后,您可以将其存储为10个字节或截断它。

如果最终截断为double是可以接受的,根据您使用的VM,中间值可能仍然存在于long double中。在这种情况下,您不需要本机方法。