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
相关推荐
geovindu5 小时前
go:Backtracking Algorithm
开发语言·后端·算法·golang·回溯算法
lzhdim6 小时前
C# 中读取CPU、硬盘和内存温度
开发语言·c#
Irene19916 小时前
Oracle PL/SQL Developer 版本差异(11g、14)实战总结
java·开发语言
qq_448011166 小时前
C语言中的getchar()
c语言·开发语言
肖志-AI全栈6 小时前
JavaScript 快速排序:从 pivot、双指针到分治思想
开发语言·javascript·排序算法
野生风长6 小时前
c++类和对象(this指针,重载operator,习题总结)
java·开发语言·c++
雪的季节6 小时前
Python「假多态」与 C++「真多态」的核心区别
开发语言·c++
WarPigs7 小时前
.NET项目app.Config笔记
c#·.net
zmzb01037 小时前
C++课后习题训练记录Day166
开发语言·c++
皓月斯语7 小时前
程序设计语言的特点
开发语言·数据结构·c++