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
相关推荐
roman_日积跬步-终至千里4 分钟前
【Java 并发-面试】从线程基础到企业级开发的知识点概况
java·开发语言
云中飞鸿4 分钟前
VS2015安装后,安装QT59,之后安装qt-vsaddin-msvc2015-2.4.3.vsix 文件失败问题!
开发语言·qt
m0_748233177 分钟前
C与C++:底层编程的六大核心共性
java·开发语言
沐知全栈开发10 分钟前
HTTP Content-Type
开发语言
一切尽在,你来19 分钟前
C++多线程教程-1.2.2 C++标准库并发组件的设计理念
开发语言·c++
m0_5613596729 分钟前
代码热更新技术
开发语言·c++·算法
兩尛35 分钟前
c++知识点1
java·开发语言·c++
凯子坚持 c36 分钟前
Qt常用控件指南(9)
开发语言·qt
ONE_PUNCH_Ge37 分钟前
Go 语言泛型
开发语言·后端·golang
leaves falling1 小时前
c语言单链表
c语言·开发语言