【问题标题】:Remove some of trailing zeros from decimal从十进制中删除一些尾随零
【发布时间】:2020-08-24 22:42:01
【问题描述】:

我有列 decimal(10,5)VALUE,还有列 intPICTURE

所以,我需要四舍五入 VALUE 到小数点后的PICTURE 位。

例如:

  • 如果VALUE = 10.50000PICTURE = 2,我想得到10.50
  • 如果VALUE = 0.15371PICTURE = 3,我想得到0.154

如果我只使用Round()Cast(Round(...) as nvarchar),那么我有尾随零。如果我 Cast()float,那么我会丢失零。

有什么解决办法吗?

【问题讨论】:

  • 这是为您的表示层而不是 RDBMS 的东西。列只能有 1 种数据类型,并且该数据类型不能有不同的比例、精度和长度。对于decimal 列,如果该列定义为decimal(10,5),它将始终有5 个小数位,即使不需要任何小数位。如果你想要一个不同的 display 值,让你的显示层来处理它。
  • @Larnu,你是对的。我应该在表示层处理这个问题。但总是想要一个简单的解决方案,比如一次选择所有内容。

标签: sql sql-server


【解决方案1】:

您可以将str() 函数与trim() 一起使用:

select trim(str(value, 20, picture))

str() 将数字转换为具有指定长度和精度的字符串。可悲的是,它产生了一个固定长度的字符串,左边用空格填充。 trim() 删除空格。

【讨论】:

    猜你喜欢
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 2011-02-25
    • 2011-04-28
    • 2014-07-26
    • 2021-08-12
    相关资源
    最近更新 更多