Round関数について。
Webマクロ、Webフォーム埋め込みマクロでRound関数が使えるのだけど、、、
accessのRound関数は銀行型。確かSharePointの関数はExcelServicesが担当だったと思うからきっと算術型なのだろうと思って確かめていた。
データマクロ、集計フィールド、Webクエリやブラウザのフォーム上では算術型の値が返ってきた。クライアント上では銀行型で返る。データマクロ/集計フィールドの演算はサーバーサイドだから必ず算術型になる。
ということは、IsClientで分岐させてクライアント上ではクライアントマクロもしくはVBAで算術型丸めをすればよいのだろう。
さらさらっと試験してみて、確かに算術型と銀行型と2通りになった。よーく考えて使わないとなと思った。まぁここまでは良かった。
ブラウザ上での実行時、結果が合わないことがある。算術型/銀行型とも違うし、あれれ変だなと。
| 値 | データマクロ 集計フィールド | Client | Web |
| -3.5 | -4 | -4 | -3 |
| -2.5 | -3 | -2 | -2 |
| -1.5 | -2 | -2 | -1 |
| -0.5 | -1 | -0 | 0 |
| 0 | 0 | 0 | 0 |
| 0.5 | 1 | 0 | 1 |
| 1.5 | 2 | 2 | 2 |
| 2.5 | 3 | 2 | 3 |
| 3.5 | 4 | 4 | 4 |
うーん、負になると丸めが変だ。
javascriptで Math.round(-2.5)は、-2 を返すからこれはどうにもならないだろう。
今更、気が付いたんだからしょうがない。
ベタベタに考えるとこんな感じだろうか。
でも、FormatNumber関数は算術型丸めをしているようだからこれでよいかもだ。
0 件のコメント:
コメントを投稿