【问题标题】:Format number to 2 decimal places将数字格式化为 2 位小数
【发布时间】:2012-06-25 13:56:21
【问题描述】:

我想知道如何在不四舍五入的情况下输出一个小数点后 2 位的数字。

例如:

2229,999 -> 2229,99

我已经试过了:

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

【问题讨论】:

  • 您似乎正在尝试使用命令进行截断。为什么不直接使用内置功能?
  • 你不需要小数点是DECIMAL(6,2))。 6-精度(总位数),2是小数点后的位数?

标签: mysql formatting decimal


【解决方案1】:

将数字格式化为 2 位小数时,您有两个选项 TRUNCATEROUND。您正在寻找TRUNCATE 函数。

例子:

不四舍五入:

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

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

文档: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

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

【讨论】:

  • 当您想要截断数字时,您应该使用truncate 来格式化数字。她在问题中非常清楚地表明这是她想做的。有多种舍入方式(下限、上限、远离零、接近零、半向上、半向下、半偶数)。它们适用于不同的环境。
  • 当然可以,但是我可以看到很多人发现我的回答很有帮助,或者他们在寻找 ROUND 命令时发现了这个问题。我会保持原样。
  • “你不应该使用 TRUNCATE 来格式化数字,因为你只会丢失被截断的数字” => 嗯,这就是截断的意义......我不明白我们应该如何用数学得到 0.17。您的答案非常适合编程示例,但不是很彻底。
  • 正如我之前所说。我知道这不是这个问题的正确答案,但人们倾向于喜欢它:) 可能是因为问题标题可能是寻找ROUND 函数的人的搜索结果。
  • 那么你应该修复它。我仍然会对每个人有用,并且它将是 100% 正确的。双赢:)
【解决方案2】:

随便用

format(number, qtyDecimals)
sample: format(1000, 2)
result 1000.00

【讨论】:

    【解决方案3】:

    怎么样 CAST(2229.999 AS DECIMAL(6,2)) 得到一个小数点后2位的小数

    【讨论】:

    • 我想你的意思是 cast(2229.999 as decimal(4,2))
    • @UncleIroh,不,我认为他实际上是指convert(2229.999 as decimal(4,2))
    • @Pacerier - 两者都在技术上工作。但是 convert 的格式是 convert(2229.999, decimal(4,2)) 和逗号,所以你可能是对的,这就是他想要的。
    • @UncleIroh,是的,我上面的错字。我说的是convert(2229.999, decimal(4,2))
    • CAST(2229.999 AS DECIMAL(4,2)) 会给你 99.99。 DECIMAL 是包括小数点左侧 2 的最大位数。 CAST(2229.99 AS DECIMAL(6,2)) 会给你 2230.00
    【解决方案4】:

    【讨论】:

    • 截断总是向下“四舍五入”。 1.999 截断为 2 DP 将是 1.99,其中 2.00 在数学上更正确。如果这不是问题,那么 truncate 就可以了,但您应该注意这一点。
    • 我同意 GordonM 并且 TRUNCATE 应该谨慎使用,尤其是浮点数!
    【解决方案5】:

    这是我使用的例子:

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

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-09-02
        • 2011-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多