2015-07-21 63 views
0

我們正在使用一項服務,該服務返回的值爲20.000-。尾隨-表示負數。這是他們的標準。如何解析其負號後面的字符串編號

我該如何解析這個沒有做字符串操作就加倍。我正在尋找解析它的很直接的方法。

+0

你必須在這裏做一些字符串manipuation,你真的沒有選擇.. 。此外,即使這裏的點會有問題(如果這是一個浮點數,小數點分隔符根據您的區域設置而變化)。 – fge

+0

@Jafar Ali,他們可以根據標準進行編碼,那麼爲什麼你不得不使用一些通用的可用API來處理這個問題。 –

+0

該團隊正在使用某種工具進行開發,他們正在遵循該工具標準。 –

回答

1

你必須操縱繩子,讓您提取負號第一:

String number = "20.00-"; 
boolean negative = false; 

if(number.substring(number.length() - 1).equals("-")) { 
    number = number.substring(0, number.length() - 1); 
    negative = true; 
} 

double parsedNumber = Double.parseDouble(number); 

if(negative) { 
    parsedNumber *= -1; 
} 
0

這可以在許多ways-

1.above過程來實現,也證明3

2.

String s =「200.0-」;

String[] str = s.split("-"); 

    double data=Double.parseDouble(str[0]); 

    data*=-1; 
1

我看到這兩個東西。

  1. 字符串操作將必須做
  2. 保留數量的精確度,如果你數爲0.00000一樣,你希望將所有的零。

如此說來,試試這個:

public static void main(String[] args) throws Exception { 
    String data = "20.123456-"; 

    // Determine if positive or negative 
    boolean negative = data.charAt(data.length() - 1) == '-'; 
    double dblData = negative 
      ? Double.parseDouble(data.substring(0, data.length() - 1)) * -1 
      : Double.parseDouble(data); 

    // Determine precision 
    long precision = 0; 
    if (data.contains(".")) { 
     String decimalPart = data.split("\\.")[1]; 
     // 0x30 and 0x39 are the hex values for characters 0 - 9 
     precision = decimalPart.chars().filter(c -> 0x30 <= c && c <= 0x39).count(); 
    } 
    NumberFormat nf = new DecimalFormat(); 
    nf.setMinimumFractionDigits((int)precision); 

    // Display results 
    System.out.println(nf.format(dblData)); 
} 

結果:

-20.123456