過去の桐井戸端BBS (桐ver.9)
30020 レポートの集計部分の合計値を通常は小数第1位まで表示し特別な場合のみ小数第2位まで表示したい。 Toppo 2005/05/25-15:52
いつも勉強させていただいています。

レポート印刷の定義の場面で困っています。
集計部分の合計値を通常は小数第1位まで表示し、特別な場合のみ小数第2位まで表示します。

#文字列(&合計,&小数桁)の場合

   1,256.0 → "1256.0"
1,256.00 → "1256.00"

となりますが、位取りのコンマが挿入できません。

#通貨文字列(&合計,"")の場合

   1,256.0 → "1,256"
1,256.00 → "1,256"

となってしまい、元の数値のような表示ができません。

常に小数第2位まで表示すれば簡単なのですが、ほとんどが小数第1位なのに2桁表示すると見づらくなるために、
2桁が含まれるときだけ2桁表示したいと思っています。
どんな方法がよいかご教授よろしくお願いいたします。

30022 Re:位取りコンマと任意の小数桁数について 悲しげ 2005/05/25-20:14
記事番号30020へのコメント
ちょっとゴテゴテですが

#通貨文字列([数値]%1,"")+"."+#cond(#mod([数値],1)=0,"0",1,#trim(#sstr(#str(#mod([数値],1)),3,2),4))

[数値]の部分は&合計(?)なりに読み替えて下さい。
それと改行は除去して下さい。
もっとエレガントな計算式がありそうですが、とりあえず
所期の目的は達していると思います。
あ、マイナスには不対応かな。(^^;)


30030 Re:位取りコンマと任意の小数桁数について Toppo 2005/05/26-00:35
記事番号30022へのコメント
悲しげさん コメントありがとうございます。

>#通貨文字列([数値]%1,"")+"."
>+#cond(#mod([数値],1)=0,"0"
>,1,#trim(#sstr(#str(#mod([数値],1)),3,2),4))

これで試してみると
1,234.00 → 1,234.0
となって、任意の少数桁(&少数桁)が反映されません。
それと#mod([数値],1)の答えは常に=0ではないのかな?
でも、私が間違っているのでしょうね。

30031 Re:位取りコンマと任意の小数桁数について 悲しげ 2005/05/26-00:56
記事番号30030へのコメント
はて?
意味が判りません。元々の希望は

>ほとんどが小数第1位なのに2桁表示すると見づらくなるために、
>2桁が含まれるときだけ2桁表示したい

と云うことは、小数第2位までの値が存在するときには小数第2位まで表示し、
それ以外は小数第1位までの表示にしたい、と読めます。
とすれば、例えば

1256.00 → 1,256.0
1256.10 → 1,256.1
1256.12 → 1,256.12
1256.123→ 1,256.12

のように表示させたかったのではありませんか?

>それと#mod([数値],1)の答えは常に=0ではないのかな?

常にではなく(^^;)、小数点下の値が存在しない時にだけ0となります。
(ヘルプの#mod参照。「小数点以下の値を取り出すには」の例)

30034 Re:位取りコンマと任意の小数桁数について うにん 2005/05/26-09:57
記事番号30031へのコメント

>1256.00 → 1,256.0
>1256.10 → 1,256.1
>1256.12 → 1,256.12
>1256.123→ 1,256.12
>
>のように表示させたかったのではありませんか?

私にもそう読めました。

気になるのは「元の数値のような表示ができません」と書いてますが、
「元の数値」が「1256.00」というのはあくまで表示形式によって
そのように表示させてるだけで、実際の数値は「1256」です。
「1256.00」と「1256」を区別したければ文字列型にしないといけません。
(桐には固定小数点型はありませんし。)

30043 Re:位取りコンマと任意の小数桁数について アックン 2005/05/26-19:16
記事番号30030へのコメント
Toppoさん、こんにちは。
レポートを下一桁表示用と下二桁表示用の2通り作成しておいて、
印刷時に &少数桁 の値によって選んではどうですか。
印刷をフォームから行っているときは、コマンドボタンでレポートファイルを指定します。

&少数桁をどうやって取得しているのかわかりませんけど、もしかして手動設定ですか。

レポートの設定
集計オブジェクトのソースには、数値型の項目または数値型の変数を設定してください。
その「オブジェクトの属性」→「印字属性」(タブ)
→「数値」枠内の「丸め」と「位取りコンマ」で、位取りコンマと小数桁を設定します。

アックン(=^・^=)
30044 Re:位取りコンマと任意の小数桁数について アックン 2005/05/26-19:20
記事番号30043へのコメント
と・・・・書いて気づいたんだけど、
数値型で小数点以下二桁を 00 と表示できないですよね。
30045 Re:位取りコンマと任意の小数桁数について アックン 2005/05/26-19:32
記事番号30044へのコメント
実際にレポートの集計オブジェクトでやってみたら、できました。
1,234.00
1,234.0
の2通りいけました。
レポートはこういうことが可能なんですね。

アックン(=^・^=)

30050 Re:位取りコンマと任意の小数桁数について Toppo 2005/05/26-21:09
記事番号30045へのコメント
悲しげさん、うにんさん、アックンさん
ありがとうございます。

説明不足ですみません。
ちょっと特殊なレポートで、通常は下1桁までなので、全てのデータを下1桁で
1,234.1 とか 1,234.0 と表示し、1枚のレポートの中で一つでも1,234.01のような下2桁のデータが出てくると、
その1枚のレポートは 1,234.10 とか1,234.00 のように全てのデータを下2桁で表示したいわけです。

&表示桁は
条件 (#mod([数値]*100,10)>0) 代入 &表示桁=-2
で取り出しています。

そこで数値データを文字列に変換するのに困っています。
よろしくお願いいたします。

悲しげさん、小数点以下の値を取り出す・・・は私の勉強不足でした。


30051 Re:位取りコンマと任意の小数桁数について 悲しげ 2005/05/27-01:07
記事番号30050へのコメント

>説明不足ですみません。

そうですね、最も肝心な部分の説明不足ですね。(^^;)
もうひとつ、頁毎に小数桁表示を変更したいと云うことに関しては、
そのレポートが一覧表(伝票含む)なのか、単票(カード)なのかも大きな問題です。
とすれば、

>そこで数値データを文字列に変換するのに困っています。

より以前に、まず頁と表示桁の関係を確定しておく必要があろうかと思います。
どうやら判断を変数&表示桁を使ってやりたいようですが、
レポート上で変数で判断させるのは、一般的にはけっこう難しいように思われます。
とすれば例えば、印刷に先だって、まずは項目[頁]の値を置換等によって取得する。
次にその頁毎に表示桁を取得し、項目[表示桁]に項目値として頁毎に置換等で記入しておく。
・・・のようなやり方の方が無難かと思います。

その上で、例えばアックン君の提案したやり方でやってみるとか。
表示桁数を異にするふたつのテキストオブジェクトを重ねておいて、
印字属性の条件式をそれぞれ
  [表示桁]=1 と [表示桁]=2(あるいは[表示桁]<>1とか)
で「印刷しない」にチェック。

もちろん、別途文字列項目で項目値を作成しておく方法も可能です。
置換式例
#通貨文字列([数値]%1,"")+"."
+#cond(#mod([数値],1)=0,#複写("0",[表示桁])
   ,1,#sstr(#str(#mod([数値],1)),3,[表示桁]))
但し挙動未確認。(^^;)

30056 Re:位取りコンマと任意の小数桁数について アックン 2005/05/27-09:17
記事番号30051へのコメント
悲しげさん
>もうひとつ、頁毎に小数桁表示を変更したいと云うことに関しては、
え・・・・・ページ毎に変更(?)
レポート毎だと思ったんだけど・・・・

30072 Re:位取りコンマと任意の小数桁数について 悲しげ 2005/05/28-15:03
記事番号30056へのコメント
>え・・・・・ページ毎に変更(?)
>レポート毎だと思ったんだけど・・・・

え・・・・・レポート毎に変更(?)
つーことは、小数1桁表示がa.rptで、小数2桁表示はb.rptを使うってこと(?)
・・・ってなことをアックン君に尋ねてもしょうがないですね、
Toppoさんに訊かなきゃ。(^^;)


30125 Re:位取りコンマと任意の小数桁数について Toppo 2005/06/01-16:47
記事番号30072へのコメント
悲しげさん、アックン君さん いろいろありがとうございます。

説明がうまくできないような、ちょっと変わったレポートなので
ここでこれ以上内容についての記述は控えさせていただきます。
ただ、悲しげさんからアドバイスいただいた計算式を参考にして
目的の置換計算式が出来上がりました。
本当に助かりました。ありがとうございました。
返信が遅くなって申し訳ありませんでした。

戻る