2008-08-21 131 views
2

我正在爲在兩個位置使用的客戶端維護一個應用程序。一個在英格蘭,一個在波蘭。本地貨幣字符串轉換

數據庫存儲在英格蘭和使用的格式爲貨幣1000.00£,但信息被波蘭當地聚集在那裏1000,00是格式。

我的問題是,在VB6是那裏需要一個貨幣字符串在本地格式轉換爲另一種,或者我就只能解析字符串和替換,或功能。 ?

BTW我已經看過CCur函數,但不能肯定是否會做我想做的。

回答

7

的數據實際上不存儲爲串"£1000.00";它以某種數字格式存儲。

側欄:一般數據庫設置使用任一十進制數據類型來存儲貨幣量(也稱爲在一些DBS),或作爲一個浮點數(也稱爲 )。

不同的是,當它存儲爲十進制某些號碼等0.01在準確而表示的那些號碼只能近似存儲,引起的舍入誤差。

數據庫出現待存儲號碼作爲"£1000.00"因爲事情是格式化以便顯示。在VB6中,有一個函數FormatCurrency,它需要一個數字1000,並返回一個字符串,如"£1000.00"

你會發現FormatCurrency函數不帶任何參數指定要使用什麼類型的貨幣。這是因爲它與VB中所有其他特定於語言環境的函數一起,會從系統的當前語言環境(從Windows控制面板)中計算貨幣。

這意味着,我的系統上,

Debug.Print FormatCurrency(1000)

將打印$1,000.00,但如果我運行Windows計算機設置爲英國的語言環境相同的程序,它可能會打印£1,000.00當然,這是完全不同的。

同樣,你已經有了一些代碼,在某個地方,我無法分辨出在波蘭的哪個地方,它似乎負責解析用戶的字符串並將其轉換爲數字。如果該代碼是在Visual Basic中,那麼它依靠控制面板來決定是否「。」。或「,」是千位分隔符,不論是「,」還是「。」是小數點。

功能CDbl將其參數轉換爲數字。因此,例如,我的系統在美國

Debug.Print CDbl("1.200")

生產的數量一分二,系統與控制面板設置爲歐洲格式,它會產生多少千,二百。

問題可能是您的某個人坐在計算機上的區域控制面板設置爲「。」。作爲小數點分隔符,但他們正在輸入「,」作爲小數點分隔符。

0

您使用的數據庫是?存儲的數據類型是什麼數據類型?

只要你總是從一種格式轉換爲另一種,你不需要做任何分析,只需更換「」用「,」或其他方式。如果存儲在字符串中,您可能還需要刪除「£」字樣。

0

處理文化對象等問題可能有一個正確的答案,但最簡單的方法是從波蘭語輸入中獲取輸入,並用。替換,然後將其存儲在數據庫中,類型爲「money 「或」小數「。如果您知道它們(可能是每個用戶可配置的)總是以波蘭語或英語輸入數字,則可以使用運行所有輸入數字的函數將字符串轉換爲適當的「十進制」類型變量。此外,出於顯示目的,您可以通過另一種類似的功能來運行它,以確保用戶始終能夠看到他們感覺舒適的數字格式。這裏的關鍵是一旦你從用戶那裏得到它,就把它切換到小數點,並且在把它發送給用戶之前,只在最後一步把它切換回字符串。

0

@KiwiBastard是的,我會這麼認爲。你在「(n)varchar」字段中存儲數量還是使用貨幣/小數類型字段?如果後者是這種情況,貨幣符號和分隔符就會被客戶端添加,並且不需要替換數據庫中的任何內容。