【问题标题】:How to see Float value in ssms without exponential values?如何在没有指数值的情况下查看 ssms 中的浮点值?
【发布时间】:2017-06-17 21:28:24
【问题描述】:

我在浮点列的表中插入了一个值。当我在 ssms 中看到记录时,它看起来像指数值。

例如,请在 ssms 中执行以下查询,并在 SSMS 中查看输出。我们可以看到指数值作为输出。

declare @l_float float = '1234567890123456789.12345'

select @l_float

是否有任何方法可以在不转换为十进制或数字的情况下看到与声明值相同的值?

对于 .NET,是否会像在 SSMS 中一样获得相同的输出? (当他们也使用双数据类型时?)

提前致谢。

问候,

穆图

【问题讨论】:

  • 为了给您一个很好的答案,如果您还没有看过How to Ask,它可能会对我们有所帮助。如果您可以提供minimal reproducible example,它可能也很有用。
  • 请记住,float 最多只有 15 位精度。你永远不会回来1234567890123456789.12345。你所希望的最好的东西就是1234567890123460000

标签: c# sql-server-2008 tsql ssms


【解决方案1】:

首先:如果没有很好的理由,请不要使用FLOAT

请记住,看到的值并不是实际值!。它是人类难以理解/解释的二进制值的文本表示。

FLOAT 和 SSMS 存在几个问题:

  1. FLOAT 不准确。当显示在某处或在计算中时,它将以某种方式四舍五入。您也可以使用某种格式强制输出,但在这种情况下,您很可能不得不切换到字符串级别
  2. 使用FLOAT 的计算往往会产生愚蠢的错误,您会得到意想不到的数字(例如0.00000003 而不是纯0)。相比之下,这可能会导致难以发现的错误...
  3. 在大多数情况下,SSMS 会尝试以最佳方式向您显示结果。根据值范围,这可能因列而异...

如果可能的话切换到DECIMAL(x,y)

【讨论】:

  • 感谢您的评论!你能补充一下这种数据类型的缺点吗?在这里,我们尝试使用 Float 的原因是对于一些与数量相关的列,我们需要超过 25 位数字,目前 Decimal 将支持它。将来,如果需要容纳超过 38 位,我们需要再次更改我们的代码。所以我们也在检查 Float。再次感谢。
  • @Muthu:只要用谷歌搜索sql server float vs. decimal 之类的东西,您就会发现大量链接。简而言之:FLOAT 可以处理很大的范围。使用微小的值,您将获得最精确的值,但使用高(或巨大)的值,您将获得一个近似值。越大越不精确。这取决于您的需求,但通常应该避免FLOAT...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
相关资源
最近更新 更多