【问题标题】:how can I disable exponential notation when selecting a float from MySQL?从 MySQL 中选择浮点数时如何禁用指数表示法?
【发布时间】:2011-08-29 22:37:40
【问题描述】:

我有一个 FLOAT 列,其中包含一些非常小的数字,例如 0.00000000000234

当我在 MySQL 中选择它们时,我会以指数表示法(如 2.34e-13)将它们取回。有什么方法可以修改这些数字的格式以强制 MySQL 将其返回为 0.00000000000234 ?

最终我要做的是修改显示,而不是数字的底层表示。所以它可能是一个显示或格式设置。 MySQL 有一个 FORMAT() 函数,但它与我想要的完全不同(它以 123,456.78 之类的格式放置数字)。

【问题讨论】:

  • mysql 不格式化数字,它返回实际的浮点数。您使用什么前端/UI 来显示结果?
  • @sehe,实际上如果您的 (
  • 所以builtin 客户端(不是内置的,但我明白你的意思)会进行格式化。感谢您的澄清

标签: mysql floating-point


【解决方案1】:

您可以将数字强制转换回所需的显示格式。将其转换为足够大的 DECIMAL 值,然后将 DECIMAL 转换为 CHAR 以获得您所追求的显示形式。这纯粹是显示,允许您继续在 mysql 中存储浮点数(如果需要)。

mysql> SELECT CAST(CAST(f AS DECIMAL(14,14)) AS CHAR) AS example from test;
+------------------+
| example          |
+------------------+
| 0.00000000000234 |
+------------------+
1 row in set (0.00 sec)

您当然会损失一些精度,具体取决于值。

【讨论】:

  • 谢谢 :) 我的第一个赏金。
【解决方案2】:

您应该考虑使用DECIMAL 来存储这些值,因为浮点值都是近似值,并且在处理如此小的数字时不准确。 DECIMAL 将根据需要显示。

【讨论】:

  • 我的印象是,只有当你有很多有效数字时,FLOAT 才会不准确,而不是如果你只是有一个非常大或非常小的数字。在这些情况下,我只有 3-5 个有效数字,而我只是在做存储和检索。
  • 我确实尝试过使用 Decimal 并且确实有效。我不确定是否要将所有浮点数更改为小数,因此仍然希望找到一种更改格式的方法。但这确实有帮助。
  • 实际上,再想一想,这行不通,因为我的应用程序的要求之一是数字被格式化为包含任意数量的小数,但不能有尾随零。因此,例如,我希望 2.345 和 4.5 在同一列中,而不是 4.500。所以十进制不是我的选择。我需要以某种方式从浮点数中消除指数符号。
【解决方案3】:

您可以使用圆形。即

从 foo 中选择 round(column,10);

【讨论】:

    猜你喜欢
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多