重複の可能性:
ファイルサイズをMB、GBなどにフォーマットする
を使用NumberFormat
して、数値を科学乗数としてフォーマットしたいと考えています。言い換えれば、次のフォーマットにしたいと思います。
- 1024 は 1K としてフォーマットする必要があります
- 1048576 は 1G としてフォーマットする必要があります
そして明らかに他の数は、k、G、および他の倍数を使用して表現する必要があります。
どうやってやるの ?または、Java ライブラリが必要ですか?
重複の可能性:
ファイルサイズをMB、GBなどにフォーマットする
を使用NumberFormat
して、数値を科学乗数としてフォーマットしたいと考えています。言い換えれば、次のフォーマットにしたいと思います。
そして明らかに他の数は、k、G、および他の倍数を使用して表現する必要があります。
どうやってやるの ?または、Java ライブラリが必要ですか?
おおよそ、これでうまくいくはずです。double
適切なフォーマットに関しては、いくつかの研磨が必要です。
static String formatSize(double size) {
String finalQ = "";
for (String q: new String[] {"k", "M", "G"}) {
if (size < 1024) break;
finalQ = q;
size /= 1024;
}
return size + finalQ;
}
package com.shashi.mpoole;
public class MetricPrefix {
static int ONE_ZERO_TWO_FOUR = 1024;
static String SEPARATOR = " ";
enum SIZE
{
B, K, M, G, T, P, E, Z, Y;
// BYTE, KILO, MEGA, GIGA, TERA, PETA, EXA, ZETTA, YOTTA;
}
class Result
{
int number = 0;
SIZE size;
public Result setNumber(int number)
{
this.number = number;
return this;
}
public Result setSize(SIZE size)
{
this.size = size;
return this;
}
public String getValue()
{
return this.number + SEPARATOR + this.size;
}
}
public Result getResult(double howMuchBigger)
{
double bigNumber = howMuchBigger;
int index = 0;
while(howMuchBigger-ONE_ZERO_TWO_FOUR>0)
{
bigNumber = howMuchBigger;
howMuchBigger = howMuchBigger/ONE_ZERO_TWO_FOUR;
index++;
}
if(index == 0)
return new Result().setNumber((int) (bigNumber)).setSize(SIZE.values()[index]);
else
return new Result().setNumber((int) (bigNumber/ONE_ZERO_TWO_FOUR)).setSize(SIZE.values()[index]);
}
public static void main(String[] args) {
MetricPrefix j = new MetricPrefix();
System.out.println(j.getResult(56).getValue());
}
}