强制逗号格式,忽略文化

时间:2012-04-24 11:05:55

标签: ms-access vba

我需要将single值格式化为字符串,其中逗号分隔符是一个点。但是,由于我的计算机使用德语设置运行,因此我总是使用1,23而不是1.23。我试过了

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

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

但是我仍然得到德语格式。我如何“覆盖”这个?

我也读过this;这是否意味着我根本无法更改这些设置?

我正在使用Access 2007。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果您的值小于或等于21,474,836.47,那么您可以采用这种简短的方式(我假设因子(1)是数组中的单个):

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

显然,即使微软表示相反,你也不能修改超出Long值((2 ^ 31) - 1)范围的数字,所以如果你的数字大于Long范围/ 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,这不是我想要的值。显然,在数字大于长的计算中,舍入在Access中变得有缺陷。

关于本地设置的更改,我不会这样做,但我相信你可以使用SetLocaleInfo(谷歌,如果你想看看如何做到这一点,你需要更改LOCALE_SDECIMAL的值)。但是它有风险,如果你弄乱了某些东西,或者如果出现问题并且例行程序的执行停止,那么你可能会无意中使用错误的配置离开机器。您在链接中阅读的内容是关于非Unicode语言的区域设置,这是完全不同的动物,即使您手动执行此操作,也必须重新启动计算机。