Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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_Double - Fatal编程技术网

Java中的字符串巨大的十进制数

Java中的字符串巨大的十进制数,java,double,Java,Double,问题是,该数字太大,不适合double,它会提供以下输出: double a=816992306.6297043221; System.out.println("a="+a); 当我减少数字时,结果会正确显示。 这个问题的有效解决方案是什么?您可以使用数字,而不是双精度的: 不可变,任意精度有符号十进制数 BigDecimal可以用所选精度表示任何数字 Double对最大值和最小值有限制,对精度有限制您可以使用数字代替Double: 不可变,任意精度有符号十进制数 BigDecimal可以用所

问题是,该数字太大,不适合double,它会提供以下输出:

double a=816992306.6297043221;
System.out.println("a="+a);
当我减少数字时,结果会正确显示。 这个问题的有效解决方案是什么?

您可以使用数字,而不是双精度的

不可变,任意精度有符号十进制数

BigDecimal
可以用所选精度表示任何数字

Double
对最大值和最小值有限制,对精度有限制

您可以使用数字代替
Double

不可变,任意精度有符号十进制数

BigDecimal
可以用所选精度表示任何数字


Double
对最大值和最小值有限制,对精度有限制,我认为这是一个精度问题

您可以查看此链接以了解格式

您可以使用DecimalFormat类

a=8.169923062970433E7
如果要在运行时设置精度

double d1 = 3.14159;
double d2 = 1.235;

DecimalFormat format = new DecimalFormat("#.##");

double roundedD1 = format.format(d1); // 3.14
double roundedD2 = format.format(d2); // 1.24

我认为这是一个精度问题

您可以查看此链接以了解格式

您可以使用DecimalFormat类

a=8.169923062970433E7
如果要在运行时设置精度

double d1 = 3.14159;
double d2 = 1.235;

DecimalFormat format = new DecimalFormat("#.##");

double roundedD1 = format.format(d1); // 3.14
double roundedD2 = format.format(d2); // 1.24

这个数字对double来说不是太大。它只是用科学符号表示的。这并没有什么错,这是故意的行为。大卫·洛伦佐·马里诺的答案可能是重复的。尽管你在小数点后3位上失去了精度,但这确实是正确的。这个数字对于双精度来说并不是太大。它只是用科学符号表示的。这并没有什么错,这是故意的行为。大卫·洛伦佐·马里诺的答案可能是重复的。记住,这确实是正确的,尽管你在小数点后3位失去了精确度。