Php 小数点后的附加数字

Php 小数点后的附加数字,php,sql,sql-server,floating-point,Php,Sql,Sql Server,Floating Point,选择在小数点后提供其他数字的查询。 列的数据类型为decimal(4,2)。 存储的值是1.39,但我得到的是1.389999999999 我可以用php执行四舍五入、数字\格式,但有没有一种方法可以在小数点后不加额外数字就得到准确的值 数据库是MSSQL。我怀疑1.39不能准确地表示为浮点 我不懂PHP,下面是一些Java代码来演示: class DoubleFloat { public static void main(String[] args) { float f = 1.3

选择在小数点后提供其他数字的查询。 列的数据类型为decimal(4,2)。 存储的值是1.39,但我得到的是1.389999999999

我可以用php执行四舍五入、数字\格式,但有没有一种方法可以在小数点后不加额外数字就得到准确的值


数据库是MSSQL。

我怀疑1.39不能准确地表示为浮点

我不懂PHP,下面是一些Java代码来演示:

class DoubleFloat {
  public static void main(String[] args) {
    float f = 1.39f;
    double d = 1.39f;
    System.out.println("f = " + f);
    System.out.println("d = " + d);
  }
}
输出:

f = 1.39
d = 1.3899999856948853

取决于您在PHP端尝试执行的操作,但您可以将数字存储为整数,例如,1.39存储为139,并在PHP端以某种方式进行转换。

我怀疑1.39不能准确表示为浮点

我不懂PHP,下面是一些Java代码来演示:

class DoubleFloat {
  public static void main(String[] args) {
    float f = 1.39f;
    double d = 1.39f;
    System.out.println("f = " + f);
    System.out.println("d = " + d);
  }
}
输出:

f = 1.39
d = 1.3899999856948853

取决于您在PHP端尝试执行的操作,但您可以将数字存储为整数,例如,1.39存储为139,并在PHP端以某种方式进行转换。

很可能您的数据库库正在将
十进制(4,2)
数据类型转换为
浮点型。现在
1.39
不能精确地表示为浮点数,而是近似为
1.38999999999999992300373832986224442720413208078125
(使用或执行
很可能您的数据库库正在转换
十进制(4,2)
datatype到
float
幕后。现在
1.39
不能精确地表示为浮点数,而是近似于
1.3899999999999999923003738329862244427204132080078125
(使用或执行a
请注意,PHP没有小数位数的精确数据类型。处理此类数字时,它将始终使用近似数据类型(浮点数)

因此,例如,将0.1+0.2与0.3进行比较很可能会导致
false
。这意味着:在进行相等比较时要小心

当显示这些值时,您不应依赖默认的显示方式,而应使用
number\u格式
。例如
number\u格式($value,2)


如果要完全避免浮点问题,则不要使用带小数点的数字。但这可能会很麻烦(例如,检索1.39的整数139,并记住此值表示百分之一).

请注意,PHP没有小数位数的精确数据类型。在处理此类数字时,它将始终使用近似数据类型(浮点数)

因此,例如,将0.1+0.2与0.3进行比较很可能会导致
false
。这意味着:在进行相等比较时要小心

当显示这些值时,您不应依赖默认的显示方式,而应使用
number\u格式
。例如
number\u格式($value,2)


如果要完全避免浮点问题,则不要使用带小数点的数字。但这可能会很麻烦(例如,检索1.39的整数139,并记住此值表示百分之一百)。

目标变量数据类型?我使用的是php5.6…因此未指定显式数据类型。.选择舍入(1.389999999999999,2)尝试
cast(列为字符(6))
,或者任何最适合php的方法。目标变量数据类型?我使用的是php5.6…因此没有指定显式数据类型。选择ROUND(1.3899999999999,2)尝试
cast(列为字符(6))
,或者任何最适合php的方法。