Curl Global Community
CurlORB での数字の扱い方 - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: CurlORB での数字の扱い方 (/showthread.php?tid=885)



CurlORB での数字の扱い方 - umemura - 04-09-2013

ここで質問することではないかもしれませんが、
Curl ORB を使ってDBの値をJava経由でクライアントに渡す際、
数値などで丸めなどがおきないよう文字列型でやり取りをするようにしています。

ただ、SQLでNUMBER型のカラムに対して TO_CHAR で取得すると、
0.01というような値は、「.01」となり、整数部の0が無い状態の文字となってしまいます。
(データベースの世界では当たり前の話なんですね)

これを、0.01 として取得したいと思ったらどのようにすべきでしょうか。
TO_CHAR でフォーマットを使って取得すべき?
Java側でフォーマットすべき?
Curl側で取得した際にフォーマットすべき?
そもそも、CurlとのI/Fを文字列に統一していることが間違い?
BigDecimalなどに格納すべき?

どのような方法が一般的なのでしょうか。
アドバイスいただければ助かります。




RE: CurlORB での数字の扱い方 - hokada - 04-22-2013

標準のAPIならBigDecimalではなくて、Decimalでどうですか?



RE: CurlORB での数字の扱い方 - umemura - 04-22-2013

APIの Decimal だと、Curl側では、
{Decimal.from-double .01}
= 0.0100000000000000002081668171
となってしまうため、使えないと思っていました。

ORBでのJavaとCurlのデータ型のサポートの一覧にもDecimalがなかったため、候補からはずしています。

また、実装上も、ORBパッケージの BigDecimal のように、
文字列から作成できたほうがわかりやすいため、
Curl側で計算するときは、BigDecimal を継続して利用したいと思っています。

とりあえず今は、TO_CHAR で取得する際に 'FM990.999' でフォーマットして、
文字列(String)としてCurl側まで渡し、
計算するときはBigDecimalに格納する、という方法にしています。



RE: CurlORB での数字の扱い方 - hokada - 04-26-2013

> APIの Decimal だと、Curl側では、
> {Decimal.from-double .01}
> = 0.0100000000000000002081668171
> となってしまうため、使えないと思っていました。

一度、doubleにしているからじゃないですかね。
『0.01i』としてやってみたらどうでしょうか?

> ORBでのJavaとCurlのデータ型のサポートの一覧にもDecimalがなかったため、候補からはずしています。

おっと、申し訳ないです。下の方に赤字でこそっと8.0から使えると記述しています。




RE: CurlORB での数字の扱い方 - umemura - 08-21-2013

下記は私の勘違いでした。
domain ={BigDecimalDomain} で表示できますね。
私が追加した機能側で問題が起きていただけでした。
すいません。


DB の NUMBER型のデータを、ORB で取得する際、DTOのフィールドの型を BigDecimal にしました。
TO_CHARする必要がないので、うれしいのですが、
このデータをそのままレコードとして利用したいです。
よい実装方法はありますでしょうか。


any 型のドメインを利用すればインスタンスはそのまま格納されるので、
lib パッケージの RecordUtil などを利用して、DTO とレコードを相互変換できるのですが、
表示内容がポインタになってしまいます。
format-spec を設定する必要があるのでしょうか。


ORBパッケージの BigDecimalDomain がそのまま使えるかなと思ったのですが、
format-spec を指定しないと、セルには何も表示されません。
指定の仕方が間違っているのでしょうか。domain = {BigDecimalDomain} と指定しています。