首页 > 解决方案 > 我正在尝试创建一个将字节转换为人类可读的 JAVA 的程序

问题描述

我正在尝试创建一个将字节转换为人类可读的程序。不幸的是,当我尝试将值格式化为 2 个十进制数字时,我不断收到错误消息。

public class Challenge                                                      
{                                                       

    public static String formatAsMemory(long size) {
       long limit = 10 * 1024;
       long limit2 = limit * 2 - 1;
        if(size < 0) {
        size = Math.abs(size);
    }

    if(size <=1023) {
        return String.format("%s%.2f bytes",size);
    } else {
        size = Math.round((double) size / 1024);
        if (size < limit2) {
            return String.format("%s%.2f Kb",size);
        } else {
            size = Math.round((double)size / 1024);
            if (size < limit2) {
                return String.format("%s%.2f Mb",size);
            } else {
                size = Math.round((double)size / 1024);
                if (size < limit2) {
                    return String.format("%s%.2f Gb",size);
                } else {
                    size = Math.round((double)size / 1024);
                        return String.format("%s%.2f Tb",size);
                }
            }
        }
    }
}
}

我收到的错误:

Exception in thread "main" java.util.MissingFormatArgumentException: Format specifier '%.2f' at java.util.Formatter.format(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.lang.String.format(Unknown Source) at Challenge.formatAsMemory(Challenge.java:12) at Main.main(Main.java:5)

我怎样才能解决这个问题?

标签: java

解决方案


在您的 return 语句中,return String.format("%s%.2f bytes",size); 这要求两个参数:%s,它是 String 的任何类型,以及%f,它是十进制数的浮点数。你提供的论据太少了。如果您打算只使用size,请记住它是长的,而不是浮点数。


推荐阅读