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
相关推荐
Bruce_Liuxiaowei5 小时前
Python 实例赋值遮蔽类属性:一个从不报错的静默陷阱
开发语言·python·语法糖
aramae6 小时前
MySQL内置函数(7)
开发语言·笔记·后端·mysql·其他
Lost of 程序猿9 小时前
用 YARP 为 .NET 微服务搭一座“立交桥“:路由转发与生产配置实践
c#·asp.net
码行山野赴时序归途9 小时前
链表家族收官篇:循环链表
c语言·开发语言·数据结构·链表
景熙55239 小时前
单体项目编写思路和落地形式
java·开发语言
计算机毕设定制辅导-无忧学长10 小时前
《基于SpringBoot的未成年人健康知识科普平台的设计与实现》
java·开发语言·vue.js·spring boot·未成年人健康知识科普平台
Ivanqhz10 小时前
Ping-Pong 双缓冲
开发语言·人工智能·python·深度学习·mlir
m0_7345717610 小时前
深入理解C++ RAII
开发语言·c++
泡海椒10 小时前
jquick-pdf 表格实战:动态数据 PDF 报表生成
java·开发语言·pdf
aramae11 小时前
模拟实现memset()(C语言)
c语言·开发语言·后端