gb和字节数(以X字节为单位),java

gb和字节数(以X字节为单位),java,java,byte,converter,Java,Byte,Converter,好的,我的pg类有这个问题,我应该把一个数字(表示字节数)作为输入,并将其转换为千兆字节、兆字节、千字节和字节。做了一点调查,但找不到解决这个问题的方法。顺便说一下,我正在使用Java。谢谢你的建议 举个例子: //3434901120028-输入 //3199 GB+1001 KB+28字节-输出字节数除以1024等于千字节数。千字节数除以1024等于兆字节数。除以1024是千兆字节数。大概 long bytes = 3434901120028l; long gb = bytes / (102

好的,我的pg类有这个问题,我应该把一个数字(表示字节数)作为输入,并将其转换为千兆字节、兆字节、千字节和字节。做了一点调查,但找不到解决这个问题的方法。顺便说一下,我正在使用Java。谢谢你的建议

举个例子: //3434901120028-输入
//3199 GB+1001 KB+28字节-输出

字节数除以1024等于千字节数。千字节数除以1024等于兆字节数。除以1024是千兆字节数。大概

long bytes = 3434901120028l;
long gb = bytes / (1024 * 1024 * 1024);
bytes -= gb * 1024 * 1024 * 1024;
long mb = bytes / (1024 * 1024);
bytes -= mb * 1024 * 1024;

long kb = bytes / 1024;
bytes -= kb * 1024;

if (gb > 0) {
    System.out.printf("%d gigabytes ", gb);
}
if (mb > 0) {
    System.out.printf("%d megabytes ", mb);
}
if (kb > 0) {
    System.out.printf("%d kilobytes ", kb);
}
if (bytes > 0) {
    System.out.printf("%d bytes ", bytes);
}
输出为

3199 gigabytes 1001 kilobytes 28 bytes 

应为双精度或浮动。你在每一步都会失去精度,因为你把结果放在一个整数中。我知道这一部分,但我如何得到例如3434901120028和gb+mb+kb+字节,在这种情况下,它会像3199 gb+1001 kb+28一样简单,非常精确,我在寻找最后一个问题,你能解释这一行吗,我得到了预期的一切该步骤字节-=gb*1024*1024*1024;从字节数中减去千兆字节数。每千兆字节为1024兆兆;每个meg为1024KB;每个kb是1024字节。这是
1024*1024*1024
。你应该编辑这篇文章,而不是把例子放在评论中