2017-06-19 5 views
1

こんにちは私は誰にでも助けてくれるのですか?2000、1000000などに2k、1m、1gなどを変換する方法

このコードは、2Kおよび1000000 1メートルなど

private static final NavigableMap<Long, String> suffixes = new TreeMap<>(); 
    static { 
     suffixes.put(1_000L, "k"); 
     suffixes.put(1_000_000L, "M"); 
     suffixes.put(1_000_000_000L, "G"); 
     suffixes.put(1_000_000_000_000L, "T"); 
     suffixes.put(1_000_000_000_000_000L, "P"); 
     suffixes.put(1_000_000_000_000_000_000L, "E"); 
    } 

    public String format(long value) { 
     //Long.MIN_VALUE == -Long.MIN_VALUE so we need an adjustment here 
     if (value == Long.MIN_VALUE) return format(Long.MIN_VALUE + 1); 
     if (value < 0) return "-" + format(-value); 
     if (value < 1000) return Long.toString(value); //deal with easy case 

     Map.Entry<Long, String> e = suffixes.floorEntry(value); 
     Long divideBy = e.getKey(); 
     String suffix = e.getValue(); 

     long truncated = value/(divideBy/10); //the number part of the output times 10 
     boolean hasDecimal = truncated < 100 && (truncated/10d) != (truncated/10); 
     return hasDecimal ? (truncated/10d) + suffix : (truncated/10) + suffix; 
    } 

に 2000を変換する私は1000000

+4

'k'を' 000'に置​​き換えますか? 'string.replace(" k "、" 000 ")'のように? –

+0

助けてもらえますか? – Prateek218

+2

言及されていませんが、有効な値は '2k7'でもあります。 – arminb

答えて

1

変換する前に値をArrayListに格納するだけで解決策が得られ、それはosumを処理しました。誰も助けてくれてありがとう:

-1
private static final String dp(String value) { 
    if (value.contains("k") || value.contains("K")){ 
     value.replace("k", "000"); 
     value.replace("K", "000"); 
    } else if (value.contains("m") || value.contains("M")){ 
     value.replace("m", "000000"); 
     value.replace("M", "000000"); 
    } else if (value.contains("g") || value.contains("G")){ 
     value.replace("g", "000000000"); 
     value.replace("G", "000000000"); 
    } ...... 


    return value; 
} 
0

から2000に例 2kのための逆変換をコードし、1メートルを必要とする私が投稿しています解決策。適切な検証が含まれていないため、適切な入力が必要です。あなたの必要性に合っているかどうか教えてください。また、必要に応じてスイッチのケースを追加/変更することもできます。

public class Test { 
    public static void main(String[] args) { 
     String values[] = { 
       "27", 
       "999", 
       "1.0 k", 
       "110.6 k", 
       "29.0 G", 
       "5m", 
       "5m30", 
       "2.7k", 
       "2k7", 
       "2k17", 
       "9.2 E", 
       "9.2EE" 
     }; 
     Test test = new Test(); 
     test.printValues(values); 
    } 

    private void printValues(String[] values) { 
     for (String value : values) { 
      if (isProperNumber(value)) { 
       printValue(value); 
      } else { 
       System.out.println("Not a proper number"); 
      } 
      System.out.println("==================="); 
     } 
    } 

    private void printValue(String value) { 
     String lastAlphabet = value.replaceAll("[^a-zA-Z]*$", "") 
            .replaceAll(".(?!$)", ""); 
     long multiplier = 1L; 

     switch (lastAlphabet.toLowerCase()) { 
      case "k": 
       multiplier = 1_000L; 
       break; 
      case "m": 
       multiplier = 1_000_000L; 
       break; 
      case "g": 
       multiplier = 1_000_000_000L; 
       break; 
      case "t": 
       multiplier = 1_000_000_000_000L; 
       break; 
      case "p": 
       multiplier = 1_000_000_000_000_000L; 
       break; 
      case "e": 
       multiplier = 1_000_000_000_000_000_000L; 
       break; 
      default: 
       break; 
     } 

     String[] values = value.split(lastAlphabet); 

     if (multiplier == 1) { 
      System.out.println("" + values[0]); 
     } else { 

      double valueMultiplier = Double.parseDouble(values[0]); 
      double valueAdder; 
      try { 
       valueAdder = Double.parseDouble(values[1]); 
      } catch (ArrayIndexOutOfBoundsException ex) { 
       valueAdder = 0.0d; 
      } 
      double total = (valueMultiplier * multiplier) + valueAdder; 
      System.out.printf("%.0f\n", total); 
     } 
    } 

    private boolean isProperNumber(String value) { 
     value = value.replaceAll("\\s+", ""); 
     String count = value.replaceAll("[.0-9]+", ""); 
     return count.length() < 2; 
    } 
} 
関連する問題