Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.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_Android_Xml - Fatal编程技术网

Java 设置单位度量值的方法

Java 设置单位度量值的方法,java,android,xml,Java,Android,Xml,我有两个变量,一个是double类型,一个是float类型。我想通过一种方法设置度量单位,所以我编写了这段代码 double total = ((double)statFs.getAvailableBlocks() *statFs.getBlockSize()); double result = availableBlocks * blockSize; myPreference.setSummary(setUnit(total, 0)); public String setUnit(d

我有两个变量,一个是double类型,一个是float类型。我想通过一种方法设置度量单位,所以我编写了这段代码

double total = ((double)statFs.getAvailableBlocks() *statFs.getBlockSize());
double result = availableBlocks * blockSize;   

myPreference.setSummary(setUnit(total, 0));

public String setUnit(double total, double size) {

        String tutto = null;
        String suffisso = null;

        if (total >= 1024 || size >= 1024 ) {
            suffisso = " KB";
            total /= 1024;
            size /= 1024;
            tutto = total+size+suffisso;
        }

        if (total >= 1024 || size >= 1024 ) {
            suffisso = " MB";
            total /= 1024;
            size /= 1024;
            tutto = total+size+suffisso;
        }

        if (total >= 1024 || size >= 1024 ) {
            suffisso = " GB";
            total /= 1024;
            size /= 1024;
            tutto = total+size+suffisso;
        }

        return tutto;

    }
您当前看到的方法仅适用于总浮动。我如何才能使它工作,即使是双变量大小

编辑:现在这两种方法都适用,但我看到了一个非常大的数字。示例:13.7856898如何计算两个变量的小数点后第一位

我设置方法的方式是否正确?

将其更改为:

public String setUnit(double total)
它将与float和double一起工作

注意:如果setUnit()的输入值小于1024,setUnit()将返回null。为了防止这种情况发生,只需再添加一个检查,检查总数<1024,这将为您提供字节。要将返回的字符串格式设置为小数点后1位,请使用string.format(),因此setUnit()如下所示:

public static String setUnit(double total) {

    String tutto = null;
    String suffisso = null;

    //if param passed to setnit() is < 1024 and > 0
    //we don't have to to any calculations on total
    //simply return it as it is with B (byte) as unit
    if (total >= 0 && total < 1024) {
        suffisso = " B";
        tutto = String.format("%.1f", total) + suffisso;
    }

    if (total >= 1024) {
        suffisso = " KB";
        total /= 1024;
        tutto = String.format("%.1f", total) + suffisso;
    }

    if (total >= 1024) {
        suffisso = " MB";
        total /= 1024;
        tutto = String.format("%.1f", total) + suffisso;
    }

    if (total >= 1024) {
        suffisso = " GB";
        total /= 1024;
        tutto = String.format("%.1f", total) + suffisso;
    }

    return tutto;
}
publicstaticstringsetunit(总计两倍){
字符串tutto=null;
字符串后缀=null;
//如果传递给setnit()的参数小于1024且大于0
//我们不必对总数进行任何计算
//只需以B(字节)为单位按原样返回即可
如果(总数>=0&&total<1024){
suffisso=“B”;
tutto=String.format(“%.1f”,总计)+后缀;
}
如果(总数>=1024){
suffisso=“KB”;
总数/=1024;
tutto=String.format(“%.1f”,总计)+后缀;
}
如果(总数>=1024){
suffisso=“MB”;
总数/=1024;
tutto=String.format(“%.1f”,总计)+后缀;
}
如果(总数>=1024){
suffisso=“GB”;
总数/=1024;
tutto=String.format(“%.1f”,总计)+后缀;
}
返回图图;
}

另一种可能性是编写两个函数来支持float和double,如下所示,其中一个函数调用另一个函数。我不喜欢让编译器隐式地将float转换为double,或者像前面的文章中建议的那样,将float转换为double,以便一个函数在同一个参数中同时支持float和double。另外,“getTotalWithUnit”比“getUnit”更清楚地说明您试图完成的任务,后者意味着只返回单元,而不返回值

公共字符串getTotalWithUnit(浮点总数){
浮动项目=浮动。总价值;
返回getTotalWithUnit(item.doubleValue());
}

公共字符串getTotalWithUnit(双倍总计){
//在此处执行业务逻辑并返回结果,而不是null
返回null;

}

如何对可变大小执行相同的操作?您的意思是什么?将您的方法签名更改为使用double将同时适用于浮点数和double数,因此我不理解您的问题。提供更多代码,说明您正在尝试执行的操作以及这些操作如何不适合您。可以获得可用内部内存的数字和总内部内存,因此很难获得小于1024的数字。无论如何,您可能会阻止返回null?为了防止返回null,只需再添加一个检查if(total>0&&total<1024),然后不进行任何转换就返回total,单位将是B(字节)。可能最好只进行整数计算,如
long
和format with platform
android.text.format.Formatter.formatFileSize()
,long)要将输出字符串限制在小数点后1位,可以使用string.format()。请参阅更新的答案。