python - 为什么在两种情况下比较浮点数的输出不同
问题描述
蟒蛇程序:
a = 0.2
if a == 0.2:
print('*')
输出:
*
C程序:
#include <stdio.h>
int main(void)
{
float a = 0.2;
if(a == 0.2)
{
puts("*");
}
}
输出:
为什么两种情况下的输出不同?操作员的工作有区别==
吗?
解决方案
这是因为 float 和 double 类型为尾数保留了不同的宽度。double 类型可以更精确地表示一个浮点数。在这种情况下,重要的是 0.2 无法准确表示,并且当存储为双精度与浮点数时,表示形式略有不同。
在条件
if(a == 0.2)
左操作数的类型为 float 而右操作数的类型为 double,作为带有“.”的数字文字的默认类型。在 C 中是双精度。
所以通过以下方式更改声明
double a = 0.2;
或者改变条件,如
if(a == 0.2f)
这是一个演示程序
#include <stdio.h>
int main(void)
{
float a1 = 0.2;
if ( a1 == 0.2f )
{
puts( "*" );
}
double a2 = 0.2;
if ( a2 == 0.2 )
{
puts( "*" );
}
}
它的输出是
*
*
推荐阅读
- c++ - 如何将 ATL::CImage 转换为 cv::Mat?
- python - pygame.display.update 导致语法错误
- h2o - 当使用枚举类型进行训练时,H2O 模型错误地将字段视为数字?
- javascript - 使用 prop-types 时检查对象中的键是否为字符串
- jquery - 向 Vuejs 组件中的元素添加类会修改该组件的所有实例
- python - 如何优化 o(n**2) 算法成为 o(nlogn) 或 o(n)?
- python - 为什么在 for 循环期间,在漂亮的汤解析中途出现“IndexError:list index out of range”?
- reactjs - 更改 s3 存储桶文件时出现 403 禁止错误
- go - 如何使用结构显示所有记录
- flutter - 文本字段光标无法正常工作