代码之家  ›  专栏  ›  技术社区  ›  kshitij

php 7.1 intval行为怪异[[副本]

php
  •  1
  • kshitij  · 技术社区  · 7 年前

    因为我只想要整型变量的int部分,而int值在比较中刺痛了我的后背。你知道为什么会这样吗?我能用什么来满足我的要求?

     intval( 9.62 * 100 ) //gives 961
        (int)( 9.62 * 100 )  // gives 962.0
    

    floor(9.62 * 100)  // but its giving 962.0 no acceptable
    
    3 回复  |  直到 7 年前
        1
  •  2
  •   kks21199 Phil    7 年前

    这应该对你有用。

    intval(strval( 9.62 * 100));
    

    这似乎是浮点精度的问题,将数字转换为字符串,然后再转换为int似乎可以解决这个问题。

    这是文档的链接, http://php.net/manual/en/language.types.float.php

    正如它所说,

     echo intval((0.1 + 0.7) * 10); //returns 7
     echo intval(strval(0.1 + 0.7) * 10); //returns 8
    
        2
  •  1
  •   Egretos    7 年前

    自从 (int)

    我试过了 sprintf('%.40F', 9.62 * 100.0); "961.9999999999998863131622783839702606201172" .

    这就是为什么 intval( 9.62 * 100 ) 给你 961 .

    你可以试着用 bcmul()

    (int) bcmul(9.62, 100);
    
        3
  •  -1
  •   mohan permude    7 年前

    天花板(9.62*100);

    推荐文章