我正在阅读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
答案 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中。在这种情况下,您不需要本机方法。