2015-01-09 64 views
0

我想知道如何保持領先0時減去數字,特別是兩個多頭。保持領先零時減去

比方說,1000 - 0999 = 0001

我想保持的答案很長的爲好。所以只要在前面添加0就不會起作用。

有什麼想法?

+8

你不能。將其格式化爲「String」。 –

+0

如果使用'int'或'long'值,你*保持前導零。只是在打印價值時它們通常會被壓制(而且無論如何你都不想看到它們)。 (OTOH,帶有'float'和'double'值,你永遠不會*保持前導零 - 甚至是第一個非零位。) –

+2

(你需要學習思考*的值*數字和它的*表示*作爲兩個不同的東西。) –

回答

6

這是一個打印問題:

long n = 1000 - 999; 
String s = String.format("%04d", n); // 0001 

更多信息:Formatter

1

由於@Sotirios Delimanolis提到的,你不能與渴望做到這一點。您將需要使用一個字符串,因爲longs不能在前面存儲額外的零。試試這個:

public String subtractWithZeros(long number1, long number2){ 
    long result = number1 - number2; 
    String strResult = String.valueOf(result); 
    String strNum1 = String.valueOf(number1); 
    String strNum2 = String.valueOf(number2); 
    int totalLength = Math.max(strNum1.length(), strNum2.length()); 
    int numOfNeededZeros = totalLength - strResult.length(); 
    for(int i = 0;i<numOfNeededZeros;i++){ 
     strResult = "0" + strResult; 
    } 
    return strResult; 
} 

這應該會返回一個很長的結果,並且你想在前面找到零。我假設減法的結果永遠不會是負面的。

2

前導零隻是標點符號。整個概念只適用於表示數字的字符串。事實上,在你製作這樣一個字符串之前,即使「數字」的概念也沒有意義。

所以你真正的問題不是「如何在減法時保持前導零?」,而是「當我的結果格式化爲字符串時,如何得到前導零」?

因此,例如,要使用(至少)4位數字和前導零打印一個數字,您可以使用out.printf("%04d", theNumber)。或者在創建字符串時使用相同的格式說明符。

0

雖然這不是這個常見問題的當代答案,但它是一種操縱「printf」和「format」參數的方法。

int number = 5_000; 

int length = Integer.toString(number).length(); 

number -= 4_999; 

System.out.printf("%0" + length + "d", number); 

// result : 0001