アプリ版:「スタンプのみでお礼する」機能のリリースについて

1つ目の質問の続きです。




「1.0051」の時のような場合「1.01」にならないといけないのが残念ながら「1.00」になってしまいます。多分、4桁目が5の時の処理が甘いのかなぁ?と思われます

これを解決できる方いらっしゃいませんか( ; ; )

質問者からの補足コメント

  • これの続きです。

    「1つ目の質問の続きです。 「1.0051」の補足画像1
      補足日時:2017/04/13 18:51
  • 色々説明不足すぎて、回答して頂いている皆さんにご迷惑をおかけしております。申し訳ありません。

    そして回答頂ている方々ありがとうございます!

      補足日時:2017/04/14 23:12

A 回答 (16件中1~10件)

比較できそうな画像がでてきたので、それに合わせた形で添付いたします。


黄色の部分(特に9.995の結果)が質問者の意図に一致しているかの確認いただければと思います。
緑色については、黄色でも表示してある値ですが、124になるのであれば、何故124なのかを教えていただきたく思います。

※添付図内でC,Dと表記していますが、C列に空白行を挿入したため、
 D,Eに変わっているのを直し忘れていました。
「1つ目の質問の続きです。 「1.0051」の回答画像16
    • good
    • 1
この回答へのお礼

とてもわかりやすい比較画像ありがとうございました。
黄色の値ですがバッチリ合っています!
9.995の結果も大丈夫でした。
そして緑色の値ですが、124ではなく125になるのが正解ですので124になるという説明が間違えておりました。
混乱を招きすみません。

何通りもの数字をA1に入力し試してみた結果、作って頂いた式は全ての条件を満たしており完璧だと思います!
yuji3690様本当に最初から最後までありがとうございました。

お礼日時:2017/04/28 21:36

#10の回答者です。


割り込み失礼します。

「最初の0を除く左から4番目の数字が5で終わり、かつ5の一つ前の数字が奇数の場合は、5を切り捨てる。
しかし、
最初の0を除く左から4番目の数字が5で終わり、かつ5の一つ前の数字が偶数の場合は5を切り上げる。」

これは、「銀行丸め」「最近接偶数丸め」「偶数丸め」とも呼ばれる計算方法です。ISO/JISに規定される丸めの方法で、四捨五入や五捨五入とかとは、まったく次元の違う種類のものです。

''標準モジュール
Public Function VROUND(ByVal arg As Double, k As Integer)
 VROUND = VBA.Round(arg, k) '
End Function
'//

呼び名はどのようにも構わないものの、それそのものの事実/結果は変わらないと思います。ただ、これは、浮動小数点丸め誤差を知らないということだと思います。

さて、その推論でもって問題を解こうとしました。
条件としては、なるべく、VBA内のコードをいじらない方法でやってみました。
そうしないと、その証明にはならないからです。

そうすると、結果として、たったひとつの数学的な矛盾が生じています。

どちらを優先させるのか、それとも、間違いなのかはこちらでは分かりません。もともと、どんな理由でご質問なさっているかは書かれておりませんから、#11様のご意見のように、個別・任意なものかもしれません。もし、そうなら、そこには一般的な結論は存在していないことになりますが、ご質問者さんは、出された数字の合っている・あっていないを、何を元に発言されているのか気になるところです。

想定できるのは、コンピュータが吐き出した数字のリストからだと思います。

今回出ていた数字の結果を新しい順に纏めてみました。補正側を主にしてみてください。
「1つ目の質問の続きです。 「1.0051」の回答画像15
    • good
    • 1
この回答へのお礼

まとめまで作って頂きありがとうございました。
124.56→125の間違いでした。

お礼日時:2017/04/27 21:03

整数→そのまま :No12でのINTを用いた判定式で可能


整数ではない(=小数)&3桁未満→そのまま :No3で作った式のままで可能
小数&1000以上(小数点より左に4桁以上)→小数第1位を四捨五入 :条件を設定しROUND
小数&1000未満(小数点より左に3桁以下)左から4番目の数字が5で終る→五捨五入 :No3のまま
小数&1000未満(小数点より左に3桁以下)左から4番目の数字が5で終る以外→四捨五入 :同上

つまり3つ目の条件を加えるだけで可能なようですね。

=IF(INT(A1)=A1,A1,IF(A1<1000,~,ROUND(A1,0)))
~の部分は前回同様No3での式を入れてください。

先ほどのコメントで
124.56→124
となっていますが、5の後に6が続いているので、5を四捨五入して125ですね?
    • good
    • 0

「小数点以降も数字が続く場合」の定義をもう少し詳しくお願いします。



例の場合ですと0.1235を0.124と表示するのですよね?
それとも、これは0.1の1を四捨五入して0となるのでしょうか?

整数の場合はそのまま、ということでしたので、小数が発生する場合のみ五捨五入を使用するはずです。
小数がある場合は整数に四捨五入するのであれば、五捨五入を使用する場合は存在しなくなります。

①整数ならそのまま表示する
②小数点以降も数字が続くなら、小数第一位を四捨五入して整数とする
③どちらにも該当しないなら、左から4番目の数字を五捨五入する
としたいはずですので、②に該当する条件を理論的に説明できれば、式を考える事ができます。
    • good
    • 1
この回答へのお礼

説明下手ですが、条件をまとめてみました。
すみませんがお願い致します。

①整数&小数点以降も数字が続くが有効数字が3桁以下ならそのまま
1234→1234
23.4→23.4
2.34→2.34

②小数点以降も数字が続く場合
【小数点の左が4桁以上ある場合は無条件で小数第一位を四捨五入する】
1234.5
1234.56…
→1235
12345.6
12345.67…
→12346

【しかし小数点の左側が3桁以下であり、(最初の0は除いて)左から4番目の数字が5で終わる場合】
123.5→5の前が奇数なので124
124.5→5の前が偶数なので124

【小数点の左側の数字が3桁以下で、(最初の0は除いて)左から4番目が5以外の場合&4番目以降も数字が続く場合は4番目を四捨五入】
123.4→123
123.56→124
124.56→124

お礼日時:2017/04/19 22:00

>「A1が整数の場合は四捨五入などせず、A1の数をそのまま使用」


=IF(INT(A1)=A1,A1,~)
INT(A1)がA1の整数部分のみ抽出したものですので、
それが=A1である(つまりA1が整数である)場合はA1を、
そうでなければ(A1が整数でなければ)~(ここに計算したい式を入れてください)
を表示する。という式ですね。
    • good
    • 1
この回答へのお礼

できました!
ありがとうございます!
更にですがこの式に、例えば
1111.1→1111
6666.6…→6667のように
小数点以降も数字が続く場合には小数第一位を四捨五入するという条件を付け足したいです。。

今作って頂いた式だと
1111.1→1110
6666.6→6670になってしまいます。

そんな式はできますでしょうか?

お礼日時:2017/04/19 19:55

横槍で申し訳ないですが、No.10さんの言うような"特別な計算方法"でも何でもないと思います。


10年以上前ではありますが、数学の授業で『五捨五入』として普通に習いました。
なので前回の質問で、切捨て切り上げの表現が逆であるとすぐに分かった訳です。
『有効数字3桁残して五捨五入をしたい』と質問されていても、大体理解はできたと思います。
『有効数字3桁残して銀行丸めをしたい』と質問されていたら、よく分かんないからパス。となっていたかもしれませんが…
(あくまで自分の場合です)

四捨五入と比べると使用頻度からあまり覚えられていないかもしれませんが、五捨五入を特別扱いしていては、数学の問題なんて特別のオンパレードかと…

質問者に直接関係のない回答を失礼しました。
    • good
    • 1

#2の回答者です。



>色々説明不足すぎて
とおっしゃていますが、そもそも、その計算は、ご質問者さんが考えたものではなく、必要あって実用のための特別な計算方法だと思います。

その経緯をご説明されたほうが早いのではないでしょうか。

私は、それを「銀行丸め」、「偶数丸め」とか、「最近接丸め」とかいうもので、本来、そのような計算は、古くからすでに存在しているものだと思って回答をしましたが、何か、そういう認識さえないようです。ただ、それでは回答はどれでもなくなってしまいます。VBAをされている方なら、ご存知のものだと思います。

違うなら違うで構いませんが、ひとこと書かせていただきました。
    • good
    • 0

>No.8


何故9.995が9.99になるのでしょうか?
左から4番目の数字=5
その前の数字=9=奇数→切り上げ
9.995の5を切り上げれば10.00となり、
セルの書式が標準であれば10と表示されます。
質問者の書いている内容とは一致しているはずですが。

この奇数→切り上げは、添付画像とは逆ですが、前回の質問
https://oshiete.goo.ne.jp/qa/9712050.html
にて、奇数なら切り上げ、偶数なら切捨て、と訂正されていましたよ。
    • good
    • 1
この回答へのお礼

yuji3690様、補足説明や訂正などして頂きありがとうございます!!

お礼日時:2017/04/14 23:14

yuji3690 さんの式ですが残念ながらまだダメみたいです


「9.995」の場合は「9.99」が正解ですが「10」になってしまいます。
通常関数の組合せだと複雑すぎてしまって確認が面倒な気がします。
また数値がマイナスのときも考えるとさらに複雑になりそうです。
    • good
    • 0

あ、説明文も間違えてますね(汗)


ROUNDUP(A1,-INT(LOG10(A1))+2)),  ←そうでない(5番目以降の数字がない)なら、4番目の数字を切り上げ
ではなく、
ROUNDUP(A1,-INT(LOG10(A1))+2)),  ←そうでない(5番目以降にも数字がある)なら、4番目の数字を切り上げ
ですね。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!