当前位置: 首页 > 面试题库 >

PHP浮到int类型强制转换的意外结果

包德业
2023-03-14
问题内容

我试图将浮点数转换为php中的int值:

var_dump((int)(39.3 * 100.0)); //Returns 3929 but should be 3930!
var_dump((int)(39.2 * 100.0)); //Returns 3920

我可以使用ceil使其工作,但是有人可以向我解释吗?

var_dump((int)ceil(39.3 * 100.0)); //Returns 3930

问题答案:

这是因为以10为底的有限表示形式的数字在PHP使用的浮点表示形式中可能具有也可能没有确切的表示形式。

看到

> php -r“回显var_dump(sprintf('%。40F',39.3 * 100.0));”
字符串(45)“ 3929.9999999999995452526491135358810424804688”

由于int总是将数字四舍五入,因此制图表达中的一个小错误使它可以将其四舍五入为一个原本希望的数字。

考虑round改为使用。



 类似资料:
  • 强制类型转换 隐式类型转换:隐式类型转换又称为自动类型转换,隐式类型转换可分为三种:算术转换、赋值转换和输出转换。 显式类型转换:显式类型转换又称为强制类型转换,指的是使用强制类型转换运算符,将一个变量或表达式转化成所需的类型,这种类型转换可能会造成数据的精度丢失。 数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。 转换的方法有两种: 自动转换(隐式转换):遵循一定的规则

  • 更新: 下面的编辑#2显示了此问题的临时解决方案,但提出了一个新问题。 我正在为我的视图开发一个使用Spring MVC和Thymeleaf的客户端。 我有两个用户,一个基本用户和一个管理员。当基本用户登录时,其个人信息将显示在主页上。当管理员登录时,他可以执行各种搜索操作以在后端数据库(MongoDB)中查找用户。他可以按州、市、用户名等查找。。。。 我得到这个错误:: 以管理员身份登录 就像我

  • Go 语言是一种强类型语言,而且没有隐式转换。也就是说运算符左右的变量类型必须一致,若不一致就会报错。为了使用户更加的容易使用,所以 Go 语言提供了各个类型之间强制类型转换的内置方法。 1. 整型和浮点型互相转换 整型和浮点型变量之间的相互转换相对容易,只需使用强制类型转换标志 type(variable)就好了。需要注意的是,当高精度向低精度类型转换的时候,会失真。即浮点型向整型转换的时候会失

  • 指针变量数据类型的强制转换 必须显式强制类型转换,不允许隐式类型转换 指向空间的强制类型转换,本质上就是普通变量的强制类型转换 int a = 10; float b = 3.14; int *pa = &a; float *pb = &b; *pa = (int)*pb; // 等价于 a = (int)b; 指针本身强制类型转换,改变的是对其指向空间的引用方式(空间大小和存储结构) int

  • 本文向大家介绍C#中的自动类型转换和强制类型转换,包括了C#中的自动类型转换和强制类型转换的使用技巧和注意事项,需要的朋友参考一下 前面已经认识了不同的数据类型,你们有没有尝试过让不同的数据类型进行运算呢? 运行结果是:1 我们把一个整型的变量赋值给了一个浮点型的变量,可以正常的输出,如果我们把一个浮点型的变量赋值给一个整型的变量呢? 这样就会报错。 为什么呢?因为我们之前说过,变量就像一个容器,

  • 问题内容: 我写了一个简单的Bag类。袋子中装有固定比例的温度枚举。它使您可以随机抓取一个,并在装满后自动自动装满。看起来像这样: 温度枚举看起来像这样: 我有一个常量实例属性。(我也尝试过使用变量。)当我需要一个新的温度时,调用一次,在合适的时候调用。 此呼叫随机地在中的行崩溃。错误是。检查调试器是否显示项目is 和。 编辑 好像我不了解调试器信息。即使有效的数组也会显示和无关的值。所以没有帮助