【问题标题】:Lost data when convert float to int in php在php中将float转换为int时丢失数据
【发布时间】:2020-08-05 04:41:13
【问题描述】:

我的代码:

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

结果:

float(1550000) int(1549999)

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

【问题讨论】:

标签: php int


【解决方案1】:

您正在使用会丢失精度的浮点数(请参阅this link)。

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

【讨论】:

    【解决方案2】:

    解决办法如下

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

    输出:

    float(1550000) int(1550000)

    【讨论】:

      【解决方案3】:

      问题是在计算浮点数时,我仍然不知道为什么它们会像下面这样不同

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

      我们可以解决这个问题

      $baseprice = round( $baseprice );
      

      【讨论】:

        【解决方案4】:

        在将浮点数四舍五入之前,您可以转换为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);
        

        【讨论】:

          猜你喜欢
          • 2011-05-22
          • 2020-09-26
          • 1970-01-01
          • 2015-07-27
          • 1970-01-01
          • 1970-01-01
          • 2012-10-18
          • 1970-01-01
          相关资源
          最近更新 更多