Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中是否有长双精度的替代品?_Java_C - Fatal编程技术网

java中是否有长双精度的替代品?

java中是否有长双精度的替代品?,java,c,Java,C,我在读C语言中的数据类型。我发现longdouble的范围比java中double的范围大。对于非常大的数字,我们可以在C中使用long double。如果我想在java中存储相同的数字,我们必须做什么?我们可以使用哪种数据类型 java中的double需要8字节(64位)IEEE 754。它涵盖了从 4.94065645841246544e-324d至1.79769313486231570e+308d(正极或负极) 有人能告诉我java中是否有longdouble的替代品吗java中没有直接的

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

java中的double需要8字节(64位)IEEE 754。它涵盖了从 4.94065645841246544e-324d至1.79769313486231570e+308d(正极或负极)


有人能告诉我java中是否有longdouble的替代品吗

java中没有直接的替代品

您可以为此目的使用

你应该明白,你的双精度值越大,在你的数学运算中使用它所损失的精度就越大。BigDecimal可以帮助您意识到这个问题

以下是BigDecimal的代码示例:

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

您可以找到许多使用BigDecimal类的示例。

至于原语类型,double和float都没有旁白,后者处理浮点


但是,这可能就是您要寻找的。

虽然不是替代品,但您可以使用java.lang.math.BigDecimal。在内存耗尽之前,您可以大致存储十亿位数字。这是一个任意精度的类,它会变大到你想要的大小,直到你的计算机内存耗尽

根据BigDecimal的文件:

String decimalString = "1423545135143513.523";
BigDecimal decimal = new BigDecimal(decimalString);
不可变、任意精度有符号十进制数。大小数 由任意精度的整数未标度值和 非负32位整数刻度,表示 小数点右边的数字。由表示的数字 大十进制为(无标度值/10标度)。BigDecimal提供 基本算术运算、比例操作、比较、, 散列和格式转换


大十进制国家的文件:

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


不可以,但是您可以使用Java本机接口调用本机方法,该方法使用long double类型执行计算。然后可以将其存储在10个字节中或截断


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

Bigdecimal不是一种数据类型,我们不能直接使用算术运算符进行算术运算。
long double
是C语言中特定于编译器的,在大多数平台上它的大小与
double
相同。long double也可以是106,C语言中的107或128位。Java不会尝试在所有平台上模拟所有C语言实现的所有数据类型。@Peter:在你最喜欢的编译器上试试。但要做好失望的准备。是的,有些编译器在x86上实现80位
长双精度
。大多数人没有。首先,它需要使用x87协处理器,而x87协处理器已经很久没有成为x86最快的FPU了。“长双精度”是,请看,第67ff页,关于为什么在语言中使用它是一个非常好的主意:这不是因为“非常大的数字”,而是因为“更精确的数字”.但是我不能用算术运算符来做算术运算,比如加法、减法等。e、 g.十进制除法(新的大十进制(“11.11”);请通过我发布的链接阅读API。我编辑了我的文章,跟随链接学习了一些例子。decimal.divide()不是一个运算符,而是一个方法?我在评论中提到,我们不能使用算术运算符。当然,这是一种方法,但它执行除法运算。Java不允许自定义运算符重写/重载,因此,您不能使用+/-/*等具有大小数(以及许多其他非基本类型)的操作。使用运算符或调用方法与Java编译器相同。它只是为你写的更多,但我不能使用算术运算符进行算术计算,如加法、减法等。你不能使用普通算术运算符,因为这是一个对象。您必须在API中使用方法,如.add()、.subtract()等。。。这有点乏味,但作为回报,你会有更多的权力和其他花哨的操作。但要小心除法,因为它会抛出异常,如果它像1/3,那么它将是非终止十进制扩展。但我不能使用算术运算符进行算术计算,如加法、减法etc@SunilKumarSahoo它有做同样事情的方法。有人建议Java支持BigInteger和BigDecimal运算符。不可变、任意精度…而且速度非常慢。您不能在
BigDecimal
上使用
Math.*
函数。巨大的劣势。
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);
      }
    }