2012-04-24 107 views
0

我需要將single值格式化爲一個字符串,其中逗號分隔符是一個點。但是,由於我的電腦使用德語設置運行,我總是得到諸如1,23而不是1.23。我試圖強制逗號格式,忽略文化

Format(factors(1)/100, "##.##") 

FormatNumber(factors(1)/100, NumDigitsAfterDecimal:=2, GroupDigits:=vbFalse), 

但兼具我仍然得到德國的格式。我如何「覆蓋」這個?

我也讀過this;這是否意味着我根本無法改變這些設置?

我使用Access 2007年。

回答

0

你說一個字符串,所以這可能幫助。這是一個從很長一段時間前,所以... :)

Dim IntPart, DecPart 
''Format for this locale 
cur = (Format(cur, "#,###.00")) 
''This locale uses stop as decimal separator 
''Change the "." to the decimal separator for your locale 
If InStr(1, cur, ".") > 0 Then 
    DecPart = Mid(cur, InStr(1, cur, ".") + 1) 
Else 
    DecPart = "00" 
End If 

''Ditto, change the stop. 
IntPart = Mid(cur, 1, InStr(1, cur, ".") - 1) 
''This locale uses comma for thousands separator, 
''so change the "," to the thousands separator for your locale 
''and ="." to the required replacement separator 
Do While InStr(1, IntPart, ",") > 0 
    Mid(IntPart, InStr(1, IntPart, ","), 1) = "." 
Loop 
''This set the decimal separator to a comma, 
''choose the separator required. 
EUCurrency = IntPart & "," & DecPart 
+0

嗯,我認爲更多有關像FormatSpecial(num,「##。##」,Culture:=「de」)'這樣的形式更優雅(和簡潔)的東西。但由於這似乎並不存在,我將使用'Replace(Format(CStr(n),「##。##」),「,」,「。」)''。我處理的數字都很小,所以我不需要關心千位分隔符。不過,謝謝你的努力。 – phg 2012-04-25 07:57:00

0

如果你的價值比21,474,836.47更少或相等,那麼你可以這樣做,擔心優雅的方式(我假設因素(1)您在陣列單):

factor(1) = Fix(factor(1)) & "." & Format(Abs(Fix(factor(1) * 100) Mod 100), "00") 

顯然,儘管微軟聲稱的相反,你不能MOD((2^31)數字的Long值的範圍之外 - 1),因此,如果您數字大於長距離/ 100,你必須以另一種方式做到這一點;看到這裏:http://www.access-programmers.co.uk/forums/showthread.php?t=219244。 所以如果你的值可能大於21,那麼你有兩個選擇。其中一個是以類似於Remou的方式來完成這個工作,他在InStr中尋找一個點或一個逗號;優點是結果總是完美的,缺點是它不乾淨,可能需要更長的時間才能運行。這樣做的另一種方法是如下:

factor(1) = Fix(factor(1)) & "." & Format(Abs(Fix(factor(1) * 100) - (Fix(factor(1)) * 100)), "00) 

的優點是,它是乾淨的(你可能希望存儲修復(因子(1))在速度的原因雖然是可變的),但它不是那麼準確。例如,如果我給出參數值214732133333,56999與這最後的公式它返回214732133333.56,這是我想要的值(我不捨入數字)。但是,如果我給參數值214732133333.569999它返回214732133333.57,這不是我想要的值。顯然,在數字大於long的計算中,四捨五入變成了Access中的錯誤。

關於本地設置的變化,我不會這樣做,但我相信你可以用SetLocaleInfo來做到這一點(谷歌,如果你想看看如何做到這一點,你需要改變LOCALE_SDECIMAL的值) 。但是這樣做很冒險,如果你弄錯了某些東西,或者如果出現問題並且程序的執行停止,你可能會毫無意義地離開機器。您在鏈接中閱讀的內容是關於非Unicode語言的區域設置,這完全是完全不同的動物,即使手動執行,您也必須重新啓動計算機。