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
相关推荐
weixin1997010801612 小时前
[特殊字符] 人工抓取数据革命:从“人肉爬虫”到“智能数据工厂”全面转型指南
开发语言·爬虫·python
一行代码一行诗++12 小时前
goto语句
java·开发语言·算法
froginwe1112 小时前
JSP 日期处理
开发语言
雪豹阿伟13 小时前
9.C# —— string拓展方法、StringBuilder高性能处理
c#·上位机
李星星_Alex13 小时前
如何通过 C# 抓取抖音 RTMP 推流码实现自主推流
c#·抖音
我材不敲代码13 小时前
Python 基础:列表的切片与嵌套列表使用技巧
开发语言·python
彦为君14 小时前
JavaSE-03-集合框架(详细版)
java·开发语言·python
我命由我1234514 小时前
Android Framework P3 - MediaServer 进程、认识 ServiceManager 进程
android·c语言·开发语言·c++·visualstudio·visual studio·android runtime
:12114 小时前
java基础---一些没注意的
java·开发语言
yuhuofei202114 小时前
【Python入门】Python中的输入与输出
开发语言·python