问题:
编写一个程序,将给定数量的字节转换为更易读的格式,方法是将其转换为以下字符之一:字节,千字节,兆字节,千兆字节或太字节。例如,1024字节为1.00 KB(KB = Kilobyte)。
以下是我一直在尝试调试的代码,但到目前为止尚未成功。鉴于以下错误信息,我对于将其除以零的位置感到困惑。
import java.text.DecimalFormat;
import java.util.Scanner;
class ByteConverter {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan1 = new Scanner(System.in);
DecimalFormat df = new DecimalFormat("#.00");
long input1;
long conversionKilobyte;
long conversionMegabyte;
long conversionGigabyte;
long conversionTerabyte;
System.out.print("Enter number of bytes: ");
input1 = scan1.nextLong();
conversionKilobyte = input1 / 1024;
conversionMegabyte = input1 / 1048576;
conversionGigabyte = input1 / 1073741824;
conversionTerabyte = input1 / (long).1099511627776;
if (input1 > (long).1099511627775) {
System.out.println(input1 + " " + "Bytes is" + " " + conversionTerabyte + " " + "TB");
} else if (input1 >= 1073741824 && input1 <= (long).1099511627776) {
System.out.println(input1 + " " + "Bytes is" + " " + conversionGigabyte + " " + "GB");
} else if (input1 >= 1048576 && input1 <= 1073741823) {
System.out.println(input1 + " " + "Bytes is" + " " + conversionMegabyte + " " + "MB");
} else if (input1 >= 1024 && input1 <= 1048575) {
System.out.println(input1 + " " + "Bytes is" + " " + conversionKilobyte + " " + "KB");
} else {
System.out.println(input1 + " " + "Bytes is" + " " + df.format(input1) + " " + "B");
}
}
}
这是我收到的输入和错误消息。感谢您的任何帮助,谢谢!
(输入):输入字节数:5
(错误):线程“main”中的异常java.lang.ArithmeticException:/由零 在ByteConverter.main(ByteConverter.java:23
答案 0 :(得分:2)
使用小数点无法将2 40 转换为long
。您实际上提供的double
字面值.1099511627776
小于1,并且您将其投放到long
,这会产生0
。
请注意,删除小数点是不够的,因为1099511627776
不是有效的int
字面值;价值太大了。
使用L
后缀指定long
字面值。
1099511627776L
或者,将1L
转移40个地方。
1L << 40
答案 1 :(得分:0)
尝试学习阅读错误消息:
(Error): Exception in thread "main" java.lang.ArithmeticException: / by zero at ByteConverter.main(ByteConverter.java:23
&#34; 23&#34;表示行号,因此错误在第23行,(长).1099511627776必须为零