アップロードしたPDFのファイルサイズ表示について

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
bcacsato
パワーユーザー
記事: 233
登録日時: 2005年11月27日(日) 14:05

アップロードしたPDFのファイルサイズ表示について

投稿記事 by bcacsato » 2012年9月20日(木) 06:26

リファレンスマニュアル5.5.4に従い、アップロードしたPDFのファイルサイズをMB単位で表示するよう、
下記のように記述しました。

コード: 全て選択

<xsl:value-of select="round(file/@filesize div 102400) div 10" />MB
ほとんどの箇所は問題なく少数第1位まで表示されるのですが、
一部、下記のようにものすごい桁数で表示されてしまいます。

 9377086バイト → 9.199999999999999MB
 9055179バイト → 8.800000000000001MB

CMSDの問題ではないのかもしれませんが、もし原因が分かりましたらご教示ください。


また、このファイルに限らず全てなのですが、CMSDで表示されるファイルサイズと、
ダウンロード時にブラウザ側にて計算して表示されるファイルサイズに差異があります。
例えば、上記ファイルの場合、IEでは下記のように算出されます。

 9377086バイト → 8.94MB
 9055179バイト → 8.63MB

これは仕方ないものでしょうか?
こちらの件ももし分かりましたら、教えていただけますと幸いです。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: アップロードしたPDFのファイルサイズ表示について

投稿記事 by webmaster » 2012年9月23日(日) 12:18

bcacsatoさん、ご質問ありがとうございます。

ものすごい桁数で表示される件、弊社では遭遇したことがないのですが、CMSD側(と言いますか、おそらくXSLライブラリ側)で起こっている問題かと思われます。
「round」というXSLの命令を使って小数点以下を四捨五入し、その結果を10で割っているだけなのに、 9.199999999999999のような結果が出るのは、何かおかしいですね…。

変化がないかもしれませんが、「round(file/@filesize div 102400) div 10」を、「(round(file/@filesize div 102400)) div 10」として試して頂いてもよろしいでしょうか?
また、何が起こっているかを調査する為、「round(file/@filesize div 102400)」とした場合の結果も教えて頂けると助かります(小数点以下が消えて10倍された値が表示されるはずですが、もしそうなっていなければかなりおかしい状況かと思います)。m(__)m

なお、MB表記の値がIEでの表示と異なる件ですが、バイトをキロバイト、メガバイトに変換する方法は、業界によって異なる慣習があり、CMS Designerでは「1KB=1024バイト、1MB=1000KB」というスタンスを取っております(記憶装置の容量計算などでよく用いられる変換方法です)。IEでは「1KB=1024バイト、1MB=1024KB、1GB=1024MB…」の計算方法を取るようです。個人的にはこちらの方が正しい計算方法だと思っておりますが、CMSDの開発時に調査したところ、前者の方法のほうが記憶装置ではメジャーという結論に至りました。あれからいろいろと状況が変わったのかもしれません。

1024*1024=1048576で、「round(file/@filesize div 1048576)」とすれば、IEと同じ方法で計算した結果が得られます。IEのように小数点以下2桁まで表示したければ、四捨五入する前に100倍してから四捨五入し、その後100で割ればOKです。

具体的には、

「round(file/@filesize * 100 div 1048576) div 100」としてみてください。

お手数をおかけしますが、お試し頂ければ幸いです。

bcacsato
パワーユーザー
記事: 233
登録日時: 2005年11月27日(日) 14:05

Re: アップロードしたPDFのファイルサイズ表示について

投稿記事 by bcacsato » 2012年9月23日(日) 14:02

webmasterさま
ご回答ありがとうございます。

「(round(file/@filesize div 102400)) div 10」としても、数値はまったく変わりませんでした。

「round(file/@filesize div 102400)」とすると、下記のようにきれいな数値となりました。

 9.199999999999999MB → 92MB
 8.800000000000001MB → 88MB

どうやら、10で割ると桁数が変になってしまうようです…。

ちなみに、「round(file/@filesize div 1048576)」としたところ、
該当箇所は小数第1位までになりましたが、
かわりに別の箇所がすごい桁数になってしまいました。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: アップロードしたPDFのファイルサイズ表示について

投稿記事 by webmaster » 2012年9月24日(月) 15:23

bcacsatoさん、引き続きお返事ありがとうございます。webmasterです。

おそらくお使いのサーバにインストールされているXSLライブラリの、XSLのround関数に潜む不具合かと思われるのですが、弊社環境で再現させることができてない(同じ数値と計算式で試しても、問題なく表示されます)のと、いろいろと探してもXSLライブラリにround関数の不具合があるという情報を得られなかった為、原因の特定に至っておりません。

しかし、調査の過程で、数値を整形して表示させる他の方法があることに気づきましたので、こちらをお試し頂いてもよろしいでしょうか。
format-number関数というものを使います。これは、指定した数値をカンマ区切りしたり、指定した桁まで小数点以下を表示したりなどの整形を行うものです。
format-number(file/@filesize div 1048576, '#.##')
こちらを、現在のselect属性とまるごと置き換えてみてください。小数点以下を表示する為にわざわざ10倍してから10で割る、といったようなことをしなくてよいので、内部処理も簡単になり、ライブラリの不具合を回避できる可能性があります。m(__)m

bcacsato
パワーユーザー
記事: 233
登録日時: 2005年11月27日(日) 14:05

Re: アップロードしたPDFのファイルサイズ表示について

投稿記事 by bcacsato » 2012年9月24日(月) 16:38

webmasterさま
ご回答ありがとうございます。
ご紹介いただいた方法で、桁数が改善されました!

なるほど、サーバー側の不具合なのですね。
どおりでサーバーを移転した途端に表示がおかしくなったのですね。

ところで、下記のように記載したところ、整数値の場合、
「1.0MB」ではなく「1MB」のように、小数点第1位は表示されません。
format-number(file/@filesize div 1048576, '#.#')
このままでもそんなに問題はありませんが、
もし強制的に小数第一位まで表示させる方法がありましたら、ご教示いただけますと幸いです。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: アップロードしたPDFのファイルサイズ表示について

投稿記事 by webmaster » 2012年9月24日(月) 17:19

webmasterです。問題が解決したとのことで、ほっとしております。さすがにXSLライブラリの不具合となると、手が出ない部分ですので…。

format-number関数については、こちらを使ったほうが明らかに分かりやすく、いろんな場面に柔軟に対応できますので、折を見てドキュメントの記載をこちらを使用するよう変更しておこうと思います。

桁数を固定にしたい場合には、#の代わりに0を入れるようにしてみてください。'#.#'' ではなく、'#.0' のようにします。'#.0#'のようにすれば、少数点以下1桁までは必ず(0だろうと)表示し、2桁目以降もあれば2桁目まで表示する、という感じになります。'#.00'とすれば、2桁目までは必ず表示します。

また、'#,###.0' のようにすれば、最初の3桁目にカンマを入れたりもできます。'#,###,###,###,###'のようにしておけば、大きい数値の表示の際も見やすくなるかもしれません。

その他、ご不明な点がありましたらまたご連絡頂ければ幸いです。

bcacsato
パワーユーザー
記事: 233
登録日時: 2005年11月27日(日) 14:05

Re: アップロードしたPDFのファイルサイズ表示について

投稿記事 by bcacsato » 2012年9月24日(月) 18:41

webmasterさま
ご回答ありがとうございます。

'#.0' としたところ、少数点以下1桁まで表示されるようになりました。
しかし、今度は「0.1」が「.1」と表示されるようになってしまいました。
そこで、'0.0'としたところ、「0.1」と表示されるようになりました。

おかげさまで、希望通りの表示となりました!
ありがとうございました。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: アップロードしたPDFのファイルサイズ表示について

投稿記事 by webmaster » 2012年9月24日(月) 20:16

bcacsatoさん、お返事ありがとうございます。

すいません、おっしゃるとおり、'0.0'がご希望の表示となるかと思います。一桁目が0である場合について失念しておりました…。m(__;)m

マニュアルにもこれで記載させて頂こうと思います。

返信