将数字格式设置为小数点后2位


154

我想知道如何在不舍入原始数字的情况下输出带两位小数的数字。

例如:

2229,999 -> 2229,99

我已经尝试过:

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

看来您正在尝试使用命令来截断。为什么不只使用内置的功能?
Fallenreaper 2012年

您是否不需要小数点DECIMAL(6,2))。6-精度(总位数),2是十进制后的位数?
user5249203

Answers:



364

将数字格式化为2个小数位时,有两个选项TRUNCATEROUND。您正在寻找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当您要截断数字时,应使用格式格式化数字。她在问题中明确表示这是她想做的。舍入有很多方法(地板,天花板,从零到零,朝零,上半部,下半部,一半均匀)。它们适用于不同的情况。
2014年

16
是的,但是我可以看到很多人发现我的回答很有帮助,或者他们在寻找ROUND命令时发现了这个问题。我将保持原样。
jmarceli 2014年

“您不应该使用TRUNCATE格式化数字,因为您只会丢失被截断的数字” =>嗯,这就是截断的重点……我不知道我们应该如何用Math获得0.17。您的答案非常适合编写编程示例,但不够彻底。
Benoit Duffez 2014年

2
正如我之前所说。我知道这不是此问题的正确答案,但人们倾向于喜欢它:)也许是因为问题标题可能是正在寻找该ROUND函数的人的搜索结果。
jmarceli 2014年

然后,您应该修复它。我仍然会得到对大家有用,并且这将是100%正确的。双赢:)
Benoit Duffez 2014年

14

如何 CAST(2229.999 AS DECIMAL(6,2)) 获得2位小数的小数


4
我认为您的意思是演员表(2229.999为十进制(4,2))
叔叔

@UncleIroh,不,我认为他的意思是 convert(2229.999 as decimal(4,2))
Pacerier,2015年

3
@Pacerier-两者在技术上均有效。但是convert的格式是带有逗号的convert(2229.999,decimal(4,2)),所以您可能是对的,这就是他想要的。
伊罗叔叔

@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
russjohnson16 '16



0

显示为十进制选择ifnull(format(100.00,1,'en_US'),0)100.0

显示为百分比选择concat(ifnull(format(100.00,0,'en_US'),0),'%')100%

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.