2012-04-24 71 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语言的区域设置,这完全是完全不同的动物,即使手动执行,您也必须重新启动计算机。