在Java中處理貨幣數據的輸入驗證,可以通過以下幾個步驟來實現:
使用正確的數據類型:對于貨幣數據,建議使用BigDecimal
類型而不是double
或float
。因為BigDecimal
可以避免浮點數運算中的精度問題。
驗證輸入格式:確保輸入的貨幣數據符合預期的格式。例如,輸入的貨幣數據應該包含小數點和兩位小數。可以使用正則表達式進行驗證。
public static boolean isValidCurrencyFormat(String input) {
// 正則表達式匹配貨幣格式,例如:123,456.78
String regex = "^\\d{1,3}(,\\d{3})*(\\.\\d{2})$";
return input.matches(regex);
}
BigDecimal
類型。可以使用BigDecimal
的構造函數或valueOf()
方法。public static BigDecimal parseCurrency(String input) throws NumberFormatException {
// 移除逗號
String cleanedInput = input.replace(",", "");
// 轉換為BigDecimal
return new BigDecimal(cleanedInput);
}
public static boolean isValidCurrencyRange(BigDecimal amount) {
BigDecimal minAmount = BigDecimal.ZERO;
BigDecimal maxAmount = new BigDecimal("99999999.99");
return amount.compareTo(minAmount) >= 0 && amount.compareTo(maxAmount) <= 0;
}
public static boolean isValidCurrencyInput(String input) {
if (!isValidCurrencyFormat(input)) {
System.out.println("Invalid currency format.");
return false;
}
BigDecimal amount;
try {
amount = parseCurrency(input);
} catch (NumberFormatException e) {
System.out.println("Failed to parse input as currency.");
return false;
}
if (!isValidCurrencyRange(amount)) {
System.out.println("Currency amount out of range.");
return false;
}
return true;
}
現在你可以使用isValidCurrencyInput()
函數來驗證貨幣數據的輸入。例如:
public static void main(String[] args) {
String input = "123,456.78";
if (isValidCurrencyInput(input)) {
System.out.println("Valid currency input: " + input);
} else {
System.out.println("Invalid currency input: " + input);
}
}
這樣,你就可以確保處理的貨幣數據是有效的,并且避免了精度問題。