[[20161012110835]] 『四捨五入について』(秋空) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『四捨五入について』(秋空)

おたずねしますがよろしくお願いします。
例えば、6÷4とします。答えは1.5ですね。
現状この式で=SUBSTITUTE(TEXT(F5,"#,0.###")&CHOOSE(6-LEN(TEXT(MOD(F5,1),"0.###"))," ","0","(00)"," "),". ","")
対応していたのですが、おかしいと指摘されました。
どの様に変更すれば1.5となるかお教えください。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 四捨五入するのに、そんな凝った数式が必要なんですか?

 なんか説明が不足していないですかねぇ。

 F5セルに何が入っていると、何になるべき所、何になってしまうのか、それを書いて貰えませんか?

(半平太) 2016/10/12(水) 11:40


 なにがしたいのかまったくわからん。

 とりあえず、

 ・整数なら小数点なしとする。
 ・小数は3桁まで

 として。

 =TEXT(F5,"#,##0"&IF(MOD(F5,1)=0,"",".###"))
 
(GobGob) 2016/10/12(水) 12:16

ありがとうございます。
F5には=B5/D5が入っています。
B5には6
D5には4です。
この答えは1.5ですが、1.5(00)になります。
この場合、割り切れますから単純に1.5にしたいと指示されました。
割り切れなくて四捨五入する時は現在のままでよいのですが、割り切れる時は無意味に0が付くとダメのようです。

(秋空) 2016/10/12(水) 12:19


 普通にROUND関数を使えばいいのでは?
 =ROUND(D5/E5,3)
(bi) 2016/10/12(水) 12:27

 ・MOD+TEXTの結果が0.5。 LENで3(3文字だから)
 ・6-3 で 3。
 ・CHOOSEで3に対応している書式が "(00)"

 割り切れてるからこの答えでいいんでないの?

 まったくわからん。

 ルール知らんのに無理。

 ちゃんとルールから説明したほうがええよ。
(GobGob) 2016/10/12(水) 12:29

 =TEXT(A1,IF(LEN(REPLACE(A1,1,FIND(".",A1&"."),""))>3,"#,0.###(!0!0)","G/標準"))
 か?

 式から見て小数点以下4桁目で四捨五入と判断した。

 違う場合は「>3」部分を調節してくれ。
(ねむねむ) 2016/10/12(水) 13:04

 すまない。
 前の式だと四捨五入が無い場合に3ケタごとのカンマがつかなかった。

 =TEXT(A1,IF(INT(A1)=A1,"#,0",IF(LEN(REPLACE(A1,1,FIND(".",A1&"."),""))>3,"#,0.###(!0!0)","#,0.###")))
 で試してみてくれ。
(ねむねむ) 2016/10/12(水) 13:09

放置していてスンマセン。
この式が一番適していますが、難点が一つだけあります。
J31が0.1096の場合0.11となりますが0.11(0)と表示したいのですがお願いします。
=TEXT(J31,"#,##0"&IF(MOD(J31,1)=0,"",".###"))
(秋空) 2016/10/12(水) 15:10

 小数第3位未満四捨五入
[[20121201102852]]

桁揃え必要ないかも。だけどご参考
(GobGob) 2016/10/12(水) 23:27


 リンク先見たらおいらの回答にそっくりな質問式でしたなwww
(GobGob) 2016/10/12(水) 23:32

 桁そろえなしで。

 =TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(TEXT(A1,"#,0.000 "),".000 ",""),"00 ","(00)"),"0 ","(0)"))
 
(GobGob) 2016/10/13(木) 07:57

ありがとう GobGobさん
知らずにGobGobさんが考えた式を使っていたんだ。
感慨深いです。
お世話になります。
四捨五入のルールは簡単そうで難しいです。
検証してみます。
(秋空) 2016/10/13(木) 12:10

 読み返して。。。

	A	B
1	1.5	1.5
2	1.55	1.55
3	1.555	1.555
4	1.5555	1.556 
5	1	1
6	1.00005	1(000)
7	1.50005	1.5(00)
8	1.52005	1.52(0)
9	1000	1,000
10		

 B1 =IF(LEN(MOD(A1,1))>5,SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(TEXT(A1,"#,0.000 "),".000 ","(000)"),"00 ","(00)"),"0 ","(0)"),TRIM(SUBSTITUTE(TEXT(A1,"#,0.### "),". ","")))
 
(GobGob) 2016/10/13(木) 18:28 → 18:32 見直し

GobGobさん
四捨五入はやはり難しいです。
上司に繰り上がりでゼロになれば(0)は必要ないと言われました。
小数第4位を四捨五入して繰り上がるときには(0)を付ける。
5.1896→5.19(0)このようにする。
また、5.02と出ていれば、わざわざ5.02(0)と出ずに5.02としなさい。
このようにできるでしょうか。
ボクにはできないので気が滅入ってきました。
すみません。
(秋空) 2016/10/14(金) 14:19

 >上司に繰り上がりでゼロになれば(0)は必要ないと言われました。

 ほいほい。

 >小数第4位を四捨五入して繰り上がるときには(0)を付ける。 
 >5.1896→5.19(0)このようにする。

 ・・・? これって繰り上がって「ゼロ」になってるんでないの?

 以下の条件ならどうなるのかおしえてちょ。

 1.5 (小数点第一位で割り切れる)
 1.55(小数点第二位で割り切れる)
 1.555(小数点第三位で割り切れる)
 1.5544 → 1.554(小数点第四位で四捨五入 数値は繰り上がらない ゼロでない)
 1.5545 → 1.555(小数点第四位で四捨五入 数値は繰り上がる ゼロでない)
 1.5595 → 1.560(小数点第四位で四捨五入 数値は繰り上がる ゼロである)
 1.5604 → 1.560(小数点第四位で四捨五入 数値は繰り上がらない ゼロである)
 
(GobGob) 2016/10/14(金) 14:47

ややこしい質問ですみません。
こんな風になればと上司の意見です。

 1.5   → 1.5
 1.55  → 1.55
 1.555 →  1.555
 1.5544 → 1.554
 1.5545 → 1.555
 1.5595 → 1.560
 1.5604 → 1.560
(秋空) 2016/10/14(金) 15:11

 >小数第4位を四捨五入して繰り上がるときには(0)を付ける。 
 >5.1896→5.19(0)このようにする。  

  これは「小数第4位を四捨五入して繰り上がるとき」ですよね?
    ↓
  >1.5595 → 1.560

  だとすると、1.56(0) になるべきなんじゃないですか?

(半平太) 2016/10/14(金) 23:14


はい、これまではそのように表示していましたが、「君に変わったのだから」との話で
1.5595 → 1.560
にしようとなりました。
(秋空) 2016/10/15(土) 07:25

んと。。。。

>「君に変わったのだから」との話で

「君に合わせて、括弧は無しにしよう。」
と、仕様が変わったという話ですか?????
なら、解決ですかね???

テーマとして面白そうだけど、解決なら、考えるモチベが無くなるので。。。
(まっつわん) 2016/10/15(土) 09:36


 回答者は、上司とのやり取りを傍で聞いてる訳じゃないんですから、
 仕様が変わったのなら、そう書いてもらわないと、訳が分からなくなります。

 既に出ている回答で使えるものがあるのかも知れませんが、調べるのも面倒なので、
 初っ端にGobGobさんが提示した数式を少し変更して、

 B1セル =TEXT(A1,"#,##0"&IF(MOD(A1,1)=0,"",IF(ROUND(A1,3)<>A1,".000",".###")))

 <結果図>
  行  ___A___  __B__
   1  1.5      1.5
   2  1.55     1.55
   3  1.555    1.555
   4  1.5544   1.554
   5  1.5545   1.555
   6  1.5595   1.560
   7  1.5604   1.560
   8       1       1

(半平太) 2016/10/15(土) 14:40


この式で
=TEXT(A1,"#,##0"&IF(MOD(A1,1)=0,"",IF(ROUND(A1,3)<>A1,".000",".###")))
こんな計算をすると
3308125×0.5712=1,889,601.
こんな風にピリオドがついてしまいます。

(秋空) 2016/10/17(月) 08:47


 =MOD(A1,1) を計算すると判りますが、2進数誤差のため、計算結果には余りがあることになっており、だから =0 の判定に流れないようですね。

 余りがある程度以上小さければ、0扱いしてはどうでしょうか。
 =TEXT(A1,"#,##0"&IF(MOD(A1,1)<0.0001,"",IF(ROUND(A1,3)<>A1,".000",".###")))
(???) 2016/10/17(月) 10:07

 =TRIM(SUBSTITUTE(TEXT(A1,"#,##0."&IF(ROUND(A1,3)=A1,"### ","000")),". ",""))
 
(GobGob) 2016/10/17(月) 13:19

GobGobさん、???さん、ご回答ありがとうございます。
求めている結果が出て上司からもOKが出ました。
説明不足でご迷惑をおかけしましたことをお詫びいたします。
(秋空) 2016/10/18(火) 09:10

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.