2010-08-05 100 views
0

我的問題是我有一個用戶輸入字段,這是一個文本字段,我必須將其轉換爲bigDecimal用於數據庫。將字符串轉換爲bigDecimal

2,50  --> 2,50 
2.50  --> 2,50 
2.5  --> 2,50 
1200  --> 1200 (or 1200,00) 
1.200  --> 1200 (or 1200,00) 
1.200,50 --> 1200,50 
1,200.50 --> 1200,50 

是否有簡單的方法來轉換所有這些類型的輸入?使用valueOfparseDouble不做這項工作。我也嘗試過DecimalFormatter,但是我找不到正確的格式。

+0

你會如何決定是否應將「1,200」轉換爲1.2或1200? – 2010-08-05 10:46:52

+0

知道這是一個貨幣價值,1,200應轉換爲1200. – Arnold 2010-08-05 11:11:43

回答

2

DecimalFormat是要走的路 - 獲取用戶的語言環境的適當DecimalFormat,並調用setParseBigDecimal(true)所以它解析到BigDecimal而非double

請注意,您確實需要知道正確的語言環境 - 否則「1,251」可能意味着「多一點四分之一」或「整數1251」。無可否認,你可能試圖解析它與每一種可用的格式,並猜測哪個是正確的格式成功,但這聽起來對我來說不是一個好主意。

+0

問題是,用戶可以獨立於區域設置進行輸入。所以決定正確的語言環境是一個問題。 – Arnold 2010-08-05 11:14:59

+1

@Arnold:那你就有問題了。如果兩個不同的用戶可以輸入相同的信息並表示不同的內容,那麼您就必須考慮這一點。當你決定要做什麼時,*技術*方面可能很簡單......但這是一個文化問題而不是技術問題。 – 2010-08-05 11:52:22

+0

對於1,251來說這是一個真正的麻煩製造者。 @Arnold--這種設計是等待發生的可用性惡夢。有些用戶不會考慮使用1,251格式,並根據他們當時需要使用它多次使用它,但是你不能真正閱讀他們的想法併爲他們提供他們想要的價值。你需要強制他們選擇一種格式(區域設置)並堅持下去,否則:「我想要十進制數字,而不是整數,爲什麼它不起作用!?有時它是正確的,有時卻不行! 「 – 2010-08-05 11:54:28