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

在Java中将字符串解析为长字符串

在Java中将字符串解析为长字符串,java,Java,我有以下代码: public class Test { public static void main(String args[]) { String blah = "1073841824.000000000000"; Long longVersion = Long.parseLong(blah); System.out.println("Long : " + longVersion); } } 当我尝试打印结果时,我得到: Exception in t

我有以下代码:

public class Test {

public static void main(String args[]) {
     String blah = "1073841824.000000000000";
     Long longVersion = Long.parseLong(blah);
     System.out.println("Long : " + longVersion);

}


}
当我尝试打印结果时,我得到:

 Exception in thread "main" java.lang.NumberFormatException: For input
 string: "1073841824.000000000000"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
          at java.lang.Long.parseLong(Long.java:589)
         at java.lang.Long.parseLong(Long.java:631)
         at Test.main(Test.java:5)

字符串
blah
表示一个1 GB的量。我不能只删除零,有些情况下,这些不会都是零。我不确定这里使用的
Long
类型是否正确。

如果要使用基元类型,use应该使用double。Long不能处理小数。但是应该使用BigDecimal类而不是double。它专为大数字设计,直接处理字符串。例如:

BigDecimal bigDecimal = new BigDecimal(blah);

看起来更像是双精度的,而不是长的。你能确认一下吗:零后的字符串是数字的小数部分吗?真是个糟糕的建议。只要字符串中的数字不是太大,就绝对没有必要使用BigDecimal。还要注意的是,BigDecimal是关于浮点数的。@GhostCat,判断OP如何说“在点之后,它们可能不都是零”,我也认为它适合于
double
BigDecimal
。但并没有证据表明小数部分是有意义的,它确实是关于浮点数的。在给定的情况下,BigDecimal更合适,因为如果浮点数超过double允许的值,它就不会截断浮点数。我不同意你的意见@GhostCat在阅读问题之前,请不要责怪答案。题目是:解析字符串的长度一样长。不管怎样,对于一个已经被问了很多次并且回答了很多次的问题,争论没有多大意义。@Joel:BigDecimal工作得很好,谢谢。正如我在帖子中所说的,分数部分很重要。