0

重複の可能性:
ファイルサイズをMB、GBなどにフォーマットする

を使用NumberFormatして、数値を科学乗数としてフォーマットしたいと考えています。言い換えれば、次のフォーマットにしたいと思います。

  • 1024 は 1K としてフォーマットする必要があります
  • 1048576 は 1G としてフォーマットする必要があります

そして明らかに他の数は、k、G、および他の倍数を使用して表現する必要があります。

どうやってやるの ?または、Java ライブラリが必要ですか?

4

3 に答える 3

5

おおよそ、これでうまくいくはずです。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;
}
于 2013-01-18T13:40:50.813 に答える
0
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());
    }

}
于 2013-01-18T14:23:28.013 に答える
-1

たぶんそれ?Javaでバイトサイズを人間が読める形式に変換する方法は?

于 2013-01-18T13:42:06.213 に答える