0

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

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

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

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

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

我正在使用 Access 2007。

4

2 回答 2

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
于 2012-04-24T11:46:31.467 回答
0

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

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

显然,即使 Microsoft 声明相反,您也不能修改 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)

优点是它很干净(尽管出于速度原因,您可能希望将 fix(factor(1)) 存储在变量中),但它并不准确。例如,如果我使用最后一个公式将值 214732133333,56999 作为参数给出,它会返回 214732133333.56,这是我想要的值(我不是四舍五入的数字)。但是,如果我将值 214732133333.569999 作为参数提供,它会返回 214732133333.57,这不是我想要的值。显然,在数字大于 long 的计算中,Access 中的舍入变得有问题。

关于本地设置的改变,我是不会做的,但是我相信你可以用SetLocaleInfo来做(谷歌说如果你想看看怎么做,你需要改变LOCALE_SDECIMAL的值)。但这是有风险的,如果你搞砸了或者如果出现问题并且例程的执行停止,你可能会无意中让机器配置错误。您在链接中读到的是关于非 Unicode 语言的区域设置,这是一种完全不同的动物,即使您手动执行此操作,您也必须重新启动计算机。

于 2013-09-25T20:33:23.287 回答