C# 中,0.1 在什么情况下不等于 0.1 ?

cs 复制代码
var v = 0.1f;
if (v == 0.1)
{
    MessageBox.Show("ok");
}

以上代码,在c# 中永远也不会弹出 ok 的提醒,因为:

等价于:

if ( 0.1f == 0.1d )

等价于:

if ( (float)0.100000001 == (double)0.10000000000000001 )

等价于:

if ( (double)0.10000000149011612 == (double)0.10000000000000001 )

因此,v!=0.1

因此,使用时要修改为:if ( v == 0.1f ) , 而不是 if ( v == 0.1 )


测试代码:

cs 复制代码
var v = 0.1f;  
var d = 0.1;
 
// 显示实际存储的值
Debug.WriteLine($"v (float) 的实际值: {v:G30}");
// 输出:v (float) 的实际值: 0.10000000149011612 
Debug.WriteLine($"d (double) 的实际值: {d:G30}");
// 输出:d (double) 的实际值: 0.10000000000000001 
// 显示类型转换后的值
Debug.WriteLine($"v 转换为 double: {(double)v:G30}");
// 输出:v 转换为 double: 0.10000000149011612 
// 比较
Debug.WriteLine($"v == 0.1: {v == 0.1}");  // false
Debug.WriteLine($"v == 0.1f: {v == 0.1f}");  // true
相关推荐
BHXDML8 分钟前
JVM 深度理解 —— 程序的底层运行逻辑
java·开发语言·jvm
Wang's Blog11 分钟前
Nodejs-HardCore: 深入解析DBF文件之二进制文件处理指南
开发语言·nodejs
hoiii18711 分钟前
基于LSB匹配的隐写术MATLAB实现程序
开发语言·matlab
J2虾虾18 分钟前
Java使用的可以使用的脚本执行引擎
java·开发语言·脚本执行
幻云201021 分钟前
Next.js指南:从入门到精通
开发语言·javascript·人工智能·python·架构
老马识途2.024 分钟前
java处理接口返回的json数据步骤 包括重试处理,异常抛出,日志打印,注意事项
java·开发语言
CCPC不拿奖不改名29 分钟前
网络与API:从HTTP协议视角理解网络分层原理+面试习题
开发语言·网络·python·网络协议·学习·http·面试
代码游侠39 分钟前
学习笔记——HC-SR04 超声波测距传感器
开发语言·笔记·嵌入式硬件·学习
superman超哥1 小时前
Context与任务上下文传递:Rust异步编程的信息高速公路
开发语言·rust·编程语言·context与任务上下文传递·rust异步编程