Converting KB to MB, GB, TB dynamically

后端 未结 10 1954
广开言路
广开言路 2020-12-14 18:24
public String size(int size){
    String hrSize = \"\";
    int k = size;
    double m = size/1024;
    double g = size/1048576;
    double t = size/1073741824;

            


        
10条回答
  •  [愿得一人]
    2020-12-14 19:01

    Its not easy to get that right. Rohit Jain mentioned the integer operation. Also rounding can be an issue, as always rounding down may not be desirable. I would advise to go for an available solution like in the triava library.

    It can format numbers with arbitrary precision, in 3 different systems (SI, IEC, JEDEC) and various output options. Here are some code examples from the triava unit tests:

    UnitFormatter.formatAsUnit(1126, UnitSystem.SI, "B");
    // = "1.13kB"
    UnitFormatter.formatAsUnit(2094, UnitSystem.IEC, "B");
    // = "2.04KiB"
    

    Printing exact kilo, mega values (here with W = Watt):

    UnitFormatter.formatAsUnits(12_000_678, UnitSystem.SI, "W", ", ");
    // = "12MW, 678W"
    

    You can pass a DecimalFormat to customize the output:

    UnitFormatter.formatAsUnit(2085, UnitSystem.IEC, "B", new DecimalFormat("0.0000"));
    // = "2.0361KiB"
    

    For arbitrary operations on kilo or mega values, you can split them into components:

    UnitComponent uc = new  UnitComponent(123_345_567_789L, UnitSystem.SI);
    int kilos = uc.kilo(); // 567
    int gigas = uc.giga(); // 123
    

提交回复
热议问题