【问题标题】:What have I to do to insert a float value into a database?我该怎么做才能将浮点值插入数据库?
【发布时间】:2014-06-09 15:59:31
【问题描述】:

我有以下情况:

我创建了一个 C# 方法,该方法在 SQL Server 数据库表中执行插入查询。在这种方法中,我有类似的东西:

                // [Severity] insertion on the DB:
                if (v.Severity != null)
                {
                    _strSQL += ",[Severity] ";
                    strSQLParametri += ", @SEVERITY ";
                    _addParameter(command, "@SEVERITY", v.Severity);
                }

Severity 是表格列,v.Severity 是我必须为新行放入该列的值。

在表格中,Severity 列定义为float

我的问题是,如果v.Severity 的值类似于3.7,它将在Severity 列中执行3.7 值,但如果它类似于3.0,则将3 而不是@987654333 @

我该怎么做才能让3.0 而不是3 进入我的Severity 列?

【问题讨论】:

  • 33.0 是同一个数字,只是显示方式不同。您需要更改显示数据的方式以显示 3.0 而不是 3
  • 它也与 3.00、3.000 等相同。同样,3.7 与 3.70、3.700 等相同。一个精确的浮点值可以有任意数量的尾随零。仅当它是科学测量时才重要(因此有效数字很重要),在这种情况下,您会将精度存储在不同的列中。
  • 更具体地说,@BradleyDotNET 评论:3.73.700000047683716 相同,因为 0.7 不能用 2 的幂精确表示,这与 0.5 不同。查看h-schmidt.net/FloatConverter/IEEE754.html 了解它是如何工作的。
  • float 是严重性选择错误的数据类型。我建议改为int

标签: c# sql sql-server database rdbms


【解决方案1】:

浮点数没有“重要的尾随零”的概念。结果 3.0, 3, 3.0000 以二进制形式存在时都是相同的。

如果您必须将值保留为某处的格式 - 以字符串形式存储在数据库(或任何其他存储)中。如果您确切知道要显示多少位数,请考虑将存储预乘值的自定义类型(如 3.03.0*10,甚至是 (int)30),并在数学运算期间小心地移动浮点数。

如果您只想显示小数点后至少一位数字 - 请使用适当的格式。

【讨论】:

  • 只是补充一下,我总是发现混合数据和 GUI 是不好的做法。您的数据库应包含并存储您的数据 (3),但您的 GUI 应负责数据如何显示和呈现给用户 (3.0)。
  • @icemanind - 好点,在极少数情况下 on 必须保留向用户显示的确切值(即某些法律文件)......但实际上即使在这种情况下,我也希望价值是除了精确的文本之外,单独存储为正确的decimal(或者可能是常规的float)值。
【解决方案2】:

这是插入整数的一种方法,该整数将自动更改为浮点数

create table #tablefloat 
(
    Severity_amount float
)

insert into #tablefloat select 212

select * from #tablefloat

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多