- ベストアンサー
切捨て関数を使わずに小数第2以下を切り捨てて表示する方法
SQL文で、切捨て関数を使わずに小数第2以下を切り捨てて表示する方法を教えてください。 23.27%が今23.3%で表示しているので、23.2%と表示したいのです。 サンプルで以下のものはありますが、 3.000 / 8.000 通常の計算式 ( 3.000 * 10 mod 8.000 / 10 ) 小数第2以下を切り捨て ここで10をかけて10で割る意味が分かりません。 さらに結果をパーセンテージで表示した状態で、小数第2以下を切り捨てて表示したいので、 この計算式では無理なのかな・・と思います。 アドバイス頂けると助かります。宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ご質問文のどこかに手抜かりはありませんか? だからなかなか回答が寄せられないのだと思います。 さて、3.00÷8.00を小数点1位まで求めるにはこのようにします。 3.00 * 10→30.00 mod(3.00 * 10, 8.00)→6.00 3.00 * 10 - mod(3.00 * 10, 8.00)→24.00 (3.00 * 10 - mod(3.00 * 10, 8.00)) / 8.00→3.000 ∴(3.00 * 10 - mod(3.00 * 10, 8.00)) / 8.000 * 10→0.300 プログラミングの世界では常套手段です。 被除数を10倍して計算すると、小数点下第一位の桁が整数部第一位に移ってきます。だから以降は端数が出ないように整数レベルで計算し、最終結果を10で除せば底上げしておいた整数部第一位の桁が小数点下第一位に戻ってくる、という理屈です。 高校の代数では、「1を加えて1を引く」というテクニックを使ったと思いますが、あれと同じです。 mod(a,b)という演算子は、a÷bの余りを整数で求めてくれるので、最初から余りが出ないように被除数から引き去る工夫をするところがポイントです。
その他の回答 (3)
- koma1000nin
- ベストアンサー率30% (342/1133)
あ、また間違えた! [誤] ∴(3.00 * 10 - mod(3.00 * 10, 7.00)) / 7.00 / 1000 * 100→42.8 [正] ∴(3.00 * 1000 - mod(3.00 * 1000, 7.00)) / 7.00 / 1000 * 100→42.8 でした。ご愛嬌。(^^;
- koma1000nin
- ベストアンサー率30% (342/1133)
3.00÷7.00=0.4285→42.8%の計算法 100.0%まであるわけですから、最大4桁表示ということで、1000倍して1000で割る方針で行きましょう。 3.00 * 1000→3000.00 mod(3.00 * 1000, 7.00)→4.00 3.00 * 1000 - mod(3.00 * 1000, 7.00)→2996.00 (3.00 * 1000 - mod(3.00 * 1000, 7.00)) / 7.00→428.00 ∴(3.00 * 10 - mod(3.00 * 10, 7.00)) / 7.00 / 1000 * 100→42.8 以上は前回回答のやり方ですが、1000で除した直後に100を乗じているのは、小数を百分率(%)に直すための操作です。1000で割って100倍するのですから、"1000 * 100"の部分は"10"で置き換えてもOKです。
- koma1000nin
- ベストアンサー率30% (342/1133)
No.1です。 誤記がありました。 数式の最後の行で、 [誤] ∴(3.00 * 10 - mod(3.00 * 10, 8.00)) / 8.000 * 10→0.300 の最後の演算子を間違えています。 [正] ∴(3.00 * 10 - mod(3.00 * 10, 8.00)) / 8.000 / 10→0.300
お礼
質問が不明瞭でほんとにすみません。そんな中、ご回答ありがとうございました。10でかけて後で10で割る意味が分かりました。 あとこの質問にはもうひとつ質問が混ざりこんでいて(そのせいで不明瞭さに拍車がかかってました。すみません・・)、今作成している計算式が率(%)で表示するものなので、3.00÷8.00=0.375の場合、100を掛けて37.5%と表示したいのです。その時もし3.00÷7.00=0.4285のようになった時、42.9%ではなくて、42.8%という風に小数第2位を切り捨てて表示させたい のですが、この場合どうしたらよいのでしょうか。 上のサンプルってあてはまるのか、どうあてはめればいいのか・・。切捨て関数がないので、計算式でするしかない状態です。 またアドバイスありましたら本当に助かるのですが、甘え甘えですみません。宜しくお願いします。
お礼
ご回答ありがとうございました。解説いただいたやり方で無事表示できるようになり作業を進めることが出来ました。 ありがとうございました。