首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java解析字节数超过39.4 GB的long var错误

Java解析字节数超过39.4 GB的long var错误
EN

Stack Overflow用户
提问于 2011-05-12 06:55:17
回答 4查看 389关注 0票数 0

我有一个应用程序,获得ftp磁盘空间。所以空间是由一个数字给出的,表示多少字节。

问题是,当我获得超过39.4 GB的空间时,我只能在一个long或double变量中存储39.4*1024*1024*1024。所以如果你有50 GB,它只会显示39.4。解决方案是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-12 07:03:05

看看BigInteger类是否能帮助您解决问题

http://download.oracle.com/javase/6/docs/api/java/math/BigInteger.html

编辑:

实际上,正如其他人已经提到的,长值将能够容纳一个非常大的值,它可以容纳远远超过40 it的数值

票数 1
EN

Stack Overflow用户

发布于 2011-05-12 07:17:35

long can store much larger values --所以在您的代码中一定有一些特定的东西。我猜到了你的代码在做什么,看看这是不是很眼熟:

代码语言:javascript
复制
class Out {
    public static void main(String args[]) {
        long l = 40L * 1024 * 1024 * 1024;
        double d = 40.0 * 1024 * 1024 * 1024;
        System.out.println("long l: " + l + " double d: " + d + "\n");
        return;
    }
}

$ vim Out.java ; javac Out.java ; java Out 
long l: 42949672960 double d: 4.294967296E10

注意,我必须将40L乘以,而不仅仅是40 --如果所有的整数都是文字整数,而没有特定的L long注释,那么Java会将整个表达式解释为int。在使用和不使用L进行测试时(并仅乘以1024 * 1024 * 102,以证实我的假设),我发现差异很有趣:

代码语言:javascript
复制
$ vim Out.java ; javac Out.java ; java Out # with only '40'
long l: -16777216 double d: 4.294967296E10

$ vim Out.java ; javac Out.java ; java Out # with '40L'
long l: 4278190080 double d: 4.294967296E10

我希望这有助于解释为什么在代码中指定文本数据类型的类型很重要。

票数 3
EN

Stack Overflow用户

发布于 2011-05-12 07:07:55

以下是存储容量大于39.4 GB的解决方案:

代码语言:javascript
复制
final long kb = 1024L;
final long mb = 1024L*kb;
final long gb = 1024L*mb;
long solution = 42L * gb;  // > 39.4 GB in a long
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5971502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档