数値を小数点以下2桁にフォーマットする


154

元の数値を四捨五入せずに、小数点以下2桁の数値を出力する方法を教えてください。

例えば:

2229,999 -> 2229,99

私はすでに試しました:

FORMAT(2229.999, 2)
CONVERT(2229.999, DECIMAL(4,2))

コマンドを使用して切り詰めようとしているようです。組み込みの機能を使用しないのはなぜですか?
Fallenreaper

小数は必要ありませんDECIMAL(6,2))。6-精度(総桁数)、2は小数点以下の桁数ですか?
user5249203

回答:


82

9
常に切り捨てて切り捨てます。1.999は2 DPに切り捨てられ、1.99になります。2.00は数学的にはより正確です。それが問題でない場合は、切り捨てても問題ありませんが、注意する必要があります。
GordonM 2015

私はGordonMに同意し、TRUNCATEは特に浮動小数点数の原因で使用する必要があります!
Nebulosar

364

数値を小数点以下2桁にフォーマットする場合TRUNCATE、およびの2つのオプションがありROUNDます。TRUNCATE機能を探しています。

例:

丸めなし:

TRUNCATE(0.166, 2)
-- will be evaluated to 0.16

TRUNCATE(0.164, 2)
-- will be evaluated to 0.16

docs:http : //www.w3resource.com/mysql/mathematical-functions/mysql-truncate-function.php

丸めあり:

ROUND(0.166, 2)
-- will be evaluated to 0.17

ROUND(0.164, 2)
-- will be evaluated to 0.16

docs:http : //www.w3resource.com/mysql/mathematical-functions/mysql-round-function.php


2
truncate切り捨てた数値が必要な場合は、数値のフォーマットに使用する必要があります。彼女はこれが彼女がやりたかったことであることを質問でかなり明らかにしました。丸めには多くの方法があります(床、天井、ゼロから離れて、ゼロに向かって、上半分、下半分、偶数)。それらは異なる状況で適切です。
キップ14

16
もちろんそうですが、多くの人が私の答えが役に立ったと思うので、ROUNDコマンドを探しているときにこの質問を見つけました。そのままにしておきます。
jmarceli 14

「数値のフォーマットにTRUNCATEを使用しないでください。単に切り捨てられた数字が失われるからです」 =>さて、それが切り捨てのポイントです... Mathで0.17を取得する方法がわかりません。あなたの答えはプログラミング例に最適ですが、完全ではありません。
Benoit Duffez 2014

2
前にも言ったように。これはこの質問の正解ではないことを知っていますが、人々はそれを好む傾向があります:) ROUND関数を探している人の検索結果である可能性がある質問のタイトルが原因である可能性があります。
jmarceli 14

次に、それを修正する必要があります。私はまだ誰にとっても役に立つでしょう、そしてそれは100%正しいでしょう。Win-win :)
Benoit Duffez 2014

14

CAST(2229.999 AS DECIMAL(6,2)) 小数点以下2桁の小数を取得する方法


4
私はあなたがキャストを意味すると思います(10進数で2229.999(4,2))
イロおじさん2014

@UncleIroh、いや、彼が実際に意味してconvert(2229.999 as decimal(4,2))いると思います 。
Pacerier、2015

3
@Pacerier-どちらも技術的に機能します。ただし、変換の形式はコンマを使用したconvert(2229.999、decimal(4,2))であるため、彼が意図していたことはおそらく正しいでしょう。
イロおじさん2015

@UncleIroh、ああそう、上のタイプミス。私は話していましたconvert(2229.999, decimal(4,2))
Pacerier、2015年

4
CAST(2229.999 AS DECIMAL(4,2))は99.99を返します。DECIMALは、小数点以下2 桁を含む最大桁数です。CAST(2229.99 AS DECIMAL(6,2))は2230.00
russjohnson09


0

これは私がこれを例として使用した方法です:

CAST(vAvgMaterialUnitCost.`avgUnitCost` AS DECIMAL(11,2)) * woMaterials.`qtyUsed` AS materialCost

0

10進数として表示ifnull(format(100.00、1、 'en_US')、0)100.0を選択

パーセンテージとして表示concat(ifnull(format(100.00、0、 'en_US')、0)、 '%')100%を選択

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