2016-01-27 52 views
0

我正試圖扭轉一些操作。逆向操作

我的輸入是

1. 14 
2. 8 
3. 10 

我的結果是

1. 0.14 
2. 0.8 
3. 0.1 

代碼

token = 14 
val = Double.parseDouble(token); 
int count = countDigits(val); 
val = val/Math.pow(10, count); 
System.out.println("val "+val);---> results 0.14 

private static int countDigits(double value) { 
int count = 0; 
while (value > 1) { 
    value = value/10; 
    count++; 
} 
return count; 
} 

殼體1

對於10我洛吉c是錯誤的。 如果我的值是10,我得到的結果是1.0而不是.1

我正在嘗試while(值> 1),但是一旦我添加=我沒有得到正確的結果。

情況下2

現在我需要0.14轉換回14 .8至8

什麼將是最好的選擇嗎?

我是否應該計算小數點後的位數並與Math.pow或其他更好的方法相乘。 是否可以計算小數點?

+0

你的猜測聽起來是正確的。你試過了嗎?它會產生預期的結果嗎? –

+0

您需要使用BigDecimal。 double不能準確地將所有基數爲10的數字表示爲分數(因爲它是具有浮點的二進制分數),所以無論您使用哪種算法,它都不適用於所有數字(並且上述算法也不適用於所有數字) –

回答

1
double d = 0.18; 
String numberD = String.valueOf(d); 
numberD = numberD.substring (numberD.indexOf (".") + 1); 
System.out.println(numberD); // Print as String 
System.out.println(Integer.parseInt(numberD)); // print as Integer 

//Output 
18 
+0

但是,如果我的值是4.0E-4 ..我沒有得到4作爲我的結果。它顯示java.lang.NumberFormatException:對於輸入字符串:「0E-4」 –

2

只是這樣做:

val = val * Math.pow(10, count); 
    Double d = new Double(val); 
    int i = d.intValue(); 
+0

它返回零 –

+0

double val = Double。 parseDouble( 「8」); int count = countDigits(val); val = val/Math.pow(10,count); (「val」+ val); // --->結果0.14 val = val * Math.pow(10,count); Double d = new Double(val); int i = d.intValue(); System.out.println(「val reverse」+ i); // ---> results 14 –

+0

好的,讓我試試看 –

0

要找到計的數值,請使用以下邏輯:

double val= 0.14; 
    String text = Double.toString(Math.abs(val)); 
    int integerPlaces = text.indexOf('.'); 
    int count= text.length() - integerPlaces - 1; 

現在,

int originalValue=(int) (val * Math.pow(10, count));