【问题标题】:Stored procedure returning wrong decimal point存储过程返回错误的小数点
【发布时间】:2013-12-02 15:52:42
【问题描述】:

您好,我有一个用于过滤的 PropertiesComboBox,我正在使用存储过程填充它。但是,当在 PropertiesComboBox 中返回值时,它们将返回额外的 0。当我只希望它返回 3.00 时,它返回 3.000

这是我的存储过程代码:

CREATE PROC GetPromoValueColumn @Platform varchar(30)
AS
BEGIN
    SELECT      p.Value
    FROM        PromotionalCode p
    JOIN        Application a
    ON          a.ID = p.AppID
    GROUP BY    p.Value
END

知道为什么会这样吗?

谢谢。

【问题讨论】:

  • 这不是问题。从技术上讲,两者都是相同的,使用yourDecimal.ToString("0.00"); 对其进行格式化。

标签: c# java sql stored-procedures aspxgridview


【解决方案1】:

p.Value 的精度允许小数点后 4 位的值。

在数学上,3、3.0、3.00、3.000、3.0000 和 3.00000 是相同的值:3。

将其格式化为对您的应用程序有意义的方式完全取决于您。

【讨论】:

  • 好的,我将如何格式化它以便将值四舍五入到小数点后 2 位?谢谢
  • 您可以使用custom numeric format string 将您的值格式化为您想要的任何格式。
  • 你可以在 c# 中使用这个,比如 Convert.Todouble(value).Tostring("#0.00")
【解决方案2】:

您可能将 PromotionalCode.p 字段定义为 decimal(X,4)

X 表示你的号码的总位数,4 是小数位数。 如果您尝试将表格列重新定义为小数(X,2),您将只看到 2 个小数位。

es:

ALTER TABLE PromotionalCode MODIFY COLUMN p DECIMAL(10,2) DEFAULT NULL;

【讨论】:

  • 我不想改变表,有没有办法改变存储过程以获得相同的结果?
  • 在 mySQL 中选择 CAST(p.Value AS DECIMAL(10,2))
【解决方案3】:
declare @id decimal(16,3) 

您需要根据您的要求设置十进制值

【讨论】:

    猜你喜欢
    • 2018-11-19
    • 2014-05-15
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 2015-09-06
    • 2015-05-17
    相关资源
    最近更新 更多