Php 小数点后的附加数字
选择在小数点后提供其他数字的查询。 列的数据类型为decimal(4,2)。 存储的值是1.39,但我得到的是1.389999999999 我可以用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
数据库是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的方法。