Java 设置单位度量值的方法
我有两个变量,一个是double类型,一个是float类型。我想通过一种方法设置度量单位,所以我编写了这段代码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 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 platformandroid.text.format.Formatter.formatFileSize()
,long)要将输出字符串限制在小数点后1位,可以使用string.format()。请参阅更新的答案。