【问题标题】:MySQL, Issue in ROUND function with a calculation insideMySQL,ROUND 函数中的问题,内部有计算
【发布时间】:2015-04-14 16:35:47
【问题描述】:

我有一个名为“itemprices”的表,还有一个名为“price”的字段。我需要用它的 GST 值查询价格值,它是价格值的 10%,更重要的是,该值必须四舍五入到小数点后两位。

如果价格 = 70.85,则 GST 值 = 7.085(价格 / 100 * 10);

  • A) 当我使用 ROUND 函数进行上述计算时,它会返回 7.08
  • B) 当我直接使用带有 7.085 的 ROUND 函数时,它会返回 7.09

(其实这两种情况我都想要7.09)

请参阅下面的查询。

SELECT 
price,
(price / 100 * 10) AS gstvalue, 
ROUND( (price / 100 * 10), 2 ) AS roundedgstvalue, 
ROUND( 7.085, 2 ) AS customround FROM  `itemprices` 
WHERE id = 10

返回值如下。

  • 价格 = 70.85
  • gstvalue = 7.085
  • roundedgstvalue = 7.08
  • customround = 7.09

我使用的是 MySQL 5.1.41 版,我想知道为什么 ROUND 函数在情况 A 和 B 中表现不同。

我还想有一个解决方案来获得情况 B 的值 7.09。

感谢您的 cmets 和答案。 谢谢!

【问题讨论】:

  • 价格/100*10?为什么不定价*0.1?
  • @dirtytyphon,两者都是一样的,不是吗?但我也尝试了 (price * 0.1),但结果还是一样。
  • @dirtytyphon,是的,在发布此问题之前,我已经关注了该文档。但我仍然无法想象我的问题的原因以及如何解决它。
  • 您应该能够结合 ceil 或 floor 功能来实现您所需要的。只需检查此线程stackoverflow.com/questions/7705548/…

标签: mysql


【解决方案1】:
ROUND( (
CEIL( price *10 ) /100 ) , 2
) AS roundedgstvalue

以上解决了我的问题。

PS ::: 即使上述解决了我的值 70.85 的问题,但对于诸如 70.83 之类的值是不正确的。因为,它仍然返回 7.09 作为 roundedgst 值。所以我必须检查我的解决方案。

IF( price >= ( (
(
FLOOR( price *10 ) + CEIL( price *10 ) ) /2 ) /10
), ROUND( (
CEIL( price *10 ) /100 ) , 2
), ROUND( (
FLOOR( price *10 ) /100 ) , 2
)
) AS roundedgstvalue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多