MySQLで最も近い整数に切り捨てる方法は?


83

MySQLで最も近い整数に切り捨てるにはどうすればよいですか?

例: 12345.7344 rounds to 12345

mysqlのround()関数は切り上げられます。

値も小数点以下の桁数もわかりません。小数点以下4桁の10桁、小数点以下7桁の2桁の可能性があります。


あなたの例は最も近い整数に丸めません!
Patrick Honorez 2017年

1
@PatrickHonorezあなたのコメントは5歳の質問に対するものであり、質問を誤解しているようです。OPは、最も近い整数に切り捨てる関数を要求しています。
ウォーレン軍曹2017年

@WarrenSergent確かに:-/
Patrick Honorez 2017年

回答:


117

FLOORを使用する:

SELECT FLOOR(your_field) FROM your_table

ありがとうございました。round()について読んでいる間ずっと、それは私を正面から見つめていました。
d -_- b

そのコメントを削除しました。これを試してみましたFLOOR()が、2つのサブクエリの違いが0でした(サブクエリの違いは-70.00でした)...これまでに見たことはありますか?
スティーブン2016年

44

小数をより低い整数に丸める場合は、FLOOR()を使用します。例:

FLOOR(1.9) => 1
FLOOR(1.1) => 1

小数を最も近い整数に丸める場合は、ROUND()を使用します。例:

ROUND(1.9) => 2
ROUND(1.1) => 1

小数を上位の整数に丸める場合は、CEIL()を使用します。例:

CEIL(1.9) => 2
CEIL(1.1) => 2


3

SUBSTRFLOORFLOORには次のような「バグ」があるため、場合よりも優れています。

SELECT 25 * 9.54 + 0.5 -> 239.00

SELECT FLOOR(25 * 9.54 + 0.5) -> 238  (oops!)

SELECT SUBSTR((25*9.54+0.5),1,LOCATE('.',(25*9.54+0.5)) - 1) -> 239

2
MySQL5.6.40でSELECTFLOOR(25 * 9.54 + 0.5)をテストしたところ、239が返されました。–
Winter

1

これは、次の2つの方法で実行できます。

  • select floor(desired_field_value) from table
  • select round(desired_field_value-0.5) from table

2番目の説明:12345.7344整数を想定します。したがって、12345.7344-0.5 = 12345.2344であり、結果を四捨五入すると12345になります。



0

小数が必要な場合はこれを使用できます

DECLARE @Num NUMERIC(18, 7) = 19.1471985
SELECT FLOOR(@Num * 10000) / 10000

出力:19.147100クリア:985追加:00

またはこれを使用します:

SELECT SUBSTRING(CONVERT(VARCHAR, @Num), 1, CHARINDEX('.', @Num) + 4)

出力:19.1471クリア:985

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.