在 php 中将浮点数转换为 int 时丢失数据


Lost data when convert float to int in php

我的代码:

$baseprice=1705000/1.1;
var_dump($baseprice);
$parseprice=intval($baseprice);
var_dump($parseprice);

结果:

float(1550000) int(1549999)

如您所见,从 float 转换为 int 时我丢失了 1 个数字,它在哪里,这种情况有什么解决方案可以在不丢失数据的情况下进行转换,谢谢。

您正在使用的浮点数会失去精度(请参阅此链接)。

如果您正在处理货币,请使用整数并以美分、便士、芬尼或其他方式工作。在显示之前转换为货币格式。

解决方案如下

$baseprice=1705000/1.1;
var_dump($baseprice);
$parseprice=intval(ceil($baseprice));
var_dump($parseprice);

输出:

浮点数(1550000) 国际(1550000)

问题是在计算浮点数时,我仍然不知道为什么它们像波纹管一样不同

$baseprice= 1705000/1.1 ; // 1550000
var_dump( decbin( $baseprice )); 
var_dump( decbin(1550000)); 

我们可以通过以下方式解决此问题

$baseprice = round( $baseprice );

在浮点数到整数舍入值之前,您可以转换为 int

$baseprice=1705000/1.1;
var_dump($baseprice);
//Before float to integer round the value then you can convert to int
$baseprice =round($baseprice);
$parseprice=intval($baseprice);
var_dump($parseprice);