【问题标题】:SQL - Float number appears as XE-05SQL - 浮点数显示为 XE-05
【发布时间】:2015-11-19 05:35:41
【问题描述】:

我在 Microsoft SQL 中插入浮点数,其中一些显示为:

7E-05
5E-05
6E-05

另一个浮点数按预期插入。 例如,这个浮点数0.00007 插入为7E-05,但这个0.01500 插入为0.015

我怀疑浮点数的大小,但在将其减小到 x.yyyyy 后,我仍然得到这种浮点数。 有谁知道是什么导致了这个问题?

【问题讨论】:

  • 它们在哪里出现? SQL(和 C#)中的浮点数只是数字,因此实际的 value 似乎存储正确。 (我假设你明白7E-050.00007 是同一个数字)
  • 在 SQL 中。当我选择值时,我得到的是 7E-05 而不是 0.00007。向客户显示 0.0007 值很重要。
  • 然后在向客户展示时对其进行格式化 - 在报告、应用程序、Excel 等中。我假设您的客户端没有运行 SQL 查询?

标签: sql sql-server number-formatting


【解决方案1】:

如果您想存储这样的值,请使用DECIMAL 而不是FLOAT 在以下:DECIMAL(18,5) 它将允许您在, 之后存储5位数字

示例:

CREATE TABLE #test
(
    ID DECIMAL(18,5)
)
INSERT INTO #Test VALUES (0.00007)

SELECT ID FROM #Test

DROP TABLE #Test

结果:

0.00007

正如乔恩·斯基特所说:

您实际上并没有尝试保存 123.66,因为您无法代表 123.66 完全是浮点数或双精度数。数据库保存数据比您习惯的更准确,仅此而已。

如果要准确保存十进制数字,请使用十进制类型。


您可以在以下位置阅读更多信息: Link 1 Link 2 Link 3 Link 4

【讨论】:

  • 问题不在于数据类型——而是数据的显示Decimal 没有比 float 更好的存储 0.00007 的能力
  • 您好,感谢您的回答。实际上 numeric(18,5) 解决了我在将问题发布到错误字段之前应用的这个问题。所以我现在申请了正确的,它工作正常。
  • @DStanley 是的,在我提供的链接中注意到了这一点。这是解决方案如何将类似0.00007(如DECIMAL)的值存储到表中并在选择它之后。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 2020-08-01
相关资源
最近更新 更多