0

値を文字列にフォーマットする必要がありますsingle。文字列では、カンマ区切り文字はドットです。ただし、私のコンピューターはドイツ語の設定で実行されているため、常にの1,23代わりに次のようなものが表示され1.23ます。私は試した

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

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

しかし、両方とも私はまだドイツ語のフォーマットを取得します。これを「オーバーライド」するにはどうすればよいですか?

私もこれを読みました; それは私がそれらの設定をまったく変更できないことを意味しますか?

Access2007を使用しています。

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) の範囲外の数値を Mod することはできないため、数値が Long 範囲 /100 より大きい場合は、それを行う必要があります。別の方法; ここを参照してください: http://www.access-programmers.co.uk/forums/showthread.php?t=219244 . したがって、値が 21 を超える可能性がある場合は、2 つのオプションがあります。InStr でポイントまたはコンマを探して、Remou の回答と同様の方法でこれを行っています。利点は、結果が常に完璧になることです。欠点は、クリーンではなく、実行に時間がかかる可能性があることです。それを行う他の方法は次のとおりです。

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 が返されますが、これは目的の値ではありません。どうやら、長い数値よりも大きい数値を使用した計算では、丸めがAccessでバグになります。

ローカル設定の変更に関しては、私はやりませんが、SetLocaleInfo でできると思います (Google で方法を確認したい場合は、LOCALE_SDECIMAL の値を変更する必要があります)。しかし、それは危険です。何かを台無しにしたり、問題が発生してルーチンの実行が停止したりした場合、うっかりマシンを間違った構成のままにしてしまう可能性があります。リンクで読んだのは、Unicode以外の言語のロケール設定に関するもので、これはまったく別の動物であり、手動で行う場合でもコンピューターを再起動する必要があります.

于 2013-09-25T20:33:23.287 に答える