2

通常の「ROUND」関数は、< 0.5 の場合は切り捨て、>= 0.5 の場合は切り上げます。

0.5 を切り捨てる必要がありますが、それ以上は切り上げる必要があります。

10.4
は 10 である
必要があります 10.5 は 10 である必要があります
10.6 は 11 である必要があります

編集:これが私が思いついた解決策です

丸められる値が B1 で
、小数精度が A1 の場合 (0 = 小数点なし、1 = 小数点以下 1 桁など)
=IF(MOD(ABS(B1),(1/(10^A1)))<=0.5*(1/(10^A1)),ROUNDDOWN(B1,A1),ROUNDUP(B1,A1))

ABS()、負の数で機能することを確認します。
(1/(10^A1))、精度 (Google の丸め関数の 2 番目の引数) が境界条件 ( 0.5) を適切にスケーリングするようにします。
そして、これMOD()が私の境界条件を実際に決定するものです。

編集2:

@Jayenのおかげでよりエレガントなソリューション

=ROUNDUP(B1 - sign(B1) * (10 ^ -A1) / 2, A1)

4

6 に答える 6

2

警告: このクレジットされた「解決策」にはバグがあります:

=ROUNDUP(B1 - sign(B1) * (10 ^ -A1) / 2, A1)

.1、.2、.3、.4、またはそれらの負の値を差し込むと、意図しない結果が表示されます。私が行った解決策は次のとおりです。

=ROUNDUP(MAX(ABS(B1)-1/2,0))*SIGN(B1)

そこで、Jayen の巧妙な式を使用しましたが、MAX を ABS と共に使用してバグを排除し、次に SIGN を掛けて、正と負の数に対して機能できるようにしました。

于 2016-02-10T11:54:37.313 に答える
2

C1 = (10 ^ -A1) / 2小数点以下を 0 桁に丸めると 0.5、1 に丸めると 0.05 などを作成しています。

次に、それは単純です:

=ROUNDUP(B1 - C1, A1)

または代入:

=ROUNDUP(B1 - (10 ^ -A1) / 2, A1)

編集:

負の半分の数値を 0 に近づけるか、0 から遠ざけるかはわかりませんが、これでよろしいですか?

=ROUNDUP(B1 - sign(B1) * (10 ^ -A1) / 2, A1)

それは半分で0に向かって丸められます。

EDIT2:

しかし、負の半分の数を 0 から遠ざけるように丸めたい場合 (すべての半分の数は負の無限大に向かって丸めます):

=CEILING(B1 - 10 ^ -A1 / 2, 10 ^ -A1)

EDIT3:

@ShawnKovac は、B1 < C1 の場合に私の元の回答に問題があることを発見したので、彼を採用して A1 に適合させました。

=ROUNDUP(MAX(ABS(B1) - 10 ^ -A1 / 2, 0), A1) * SIGN(B1)

また、負の無限大への丸めに対する私の答えは、B1 < C1 の場合にエラーをスローするため、ここに更新があります。

=CEILING(B1 - 10 ^ -A1 / 2, SIGN(B1 - 10 ^ -A1 / 2) * 10 ^ -A1)

于 2015-07-04T23:53:21.877 に答える
0

データセットによっては、数値が無効にならないことがわかっている限り、値から減算することもできます。

 =round(A1 - 0.00001)
于 2013-05-24T07:21:57.883 に答える
0

0.1 を差し引くだけで正の値で動作しますが、負の値を使用する場合は、A1 が低い場合に 0 を使用できます IF(A1<0,ROUND(A1+0.1,0),ROUND(A1-0.1,0) )

上記の式の結果を示す表 ^^^^^^ お役に立てば幸いです :)

于 2020-10-14T21:21:17.357 に答える