【问题标题】:What will be the constraints of the values that can be entered in the colum that was declared as FLOAT?可以在声明为 FLOAT 的列中输入的值的约束是什么?
【发布时间】:2020-03-26 03:50:25
【问题描述】:

我正在构建一个网络应用程序,并且在其中的某些部分中,一位老师插入了科学实验的预期结果。这些结果必须非常准确,它们可能会像这样0.4933546522886728。经过一段时间的搜索,FLOAT 似乎是将这些答案存储在数据库中的正确数据类型。众所周知,mysql 中的FLOAT 列可以这样声明FLOAT(n, d),其中n 是数字的总位数,d 是小数点后的位数。所以,我不知道老师会输入多少位数。那么,如果我这样声明它会发生什么FLOAT。让我想到这一点的是 mysql 文档中的 quote

为了获得最大的可移植性,需要存储近似数值数据值的代码应使用 FLOAT 或 DOUBLE PRECISION,不指定精度或位数。

FLOAT 列中输入的最大值和最小值是多少。

我也想过用VARCHAR存储老师输入的确切数字,然后根据学生输入的数据库中数字的性质与正确答案进行比较将被操纵匹配另一个号码。

例如,如果老师输入1.23451,学生输入1.4235123,我的代码将变为1.42351

【问题讨论】:

  • 0.4933546522886728 看起来像 DOUBLE。

标签: mysql database floating-point sqldatatypes


【解决方案1】:

FLOATDECIMAL 末尾的 (n,d) 没有意义。它所做的只是导致额外的舍入。

FLOAT 提供大约 7 个显着 十进制数字的精度和适度大的指数范围。 0.4933546522886728 将被存储为大约 0.4933546xxxx,额外的数字是噪声。

该数字可以存储在 DOUBLE 中,精度为 53 位(约 16 位)后会出现舍入误差。

很少有科学测量需要比 FLOAT 精度更多的数字。

您可以INSERT ... VALUES ( 0.4933546522886728 ) 并将其放入FLOAT。它将被四舍五入到 24 个重要的。 4933546522886.728 同上。或 0.0000000004933546522886728 。或 4.933546522886728e20 或 4.933546522886728e-20 。

获取给定的任何数字,只需将它们放入 INSERT 即可,无需担心精度或缩放。

VARCHAR 是数字和日期的错误方式,除非您想在原始输入转换为内部格式之前存储它。

【讨论】:

    猜你喜欢
    • 2015-02-14
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    相关资源
    最近更新 更多