Per què 0.1 + 0.2 no és igual a 0.3 en C# (i en la majoria dels llenguatges)

Aprèn per què 0.1 + 0.2 ? 0.3 en C# i la majoria dels llenguatges de programació moderns. Descobreix com gestionar l'aritmètica en coma flotant i les millors pràctiques per comparar valors numèrics. Q2BSTUDIO ofereix solucions a mida en desenvolupament de programari, intel·ligència artificial, ciberse

sábado, 16 de agosto de 2025 • 3 min de lectura • Equip Q2BSTUDIO

Intel·ligència-Artificial-

Aquest article va ser publicat originalment a Hashnode i aquí tens una versió en espanyol que explica per què 0.1 + 0.2 != 0.3 en C# i en la majoria dels altres llenguatges

Molts desenvolupadors, fins i tot amb experiència, es sorprenen en veure que en C# l'expressió Console.WriteLine(0.1 + 0.2 == 0.3) imprimeix False

Per què passa això? El motiu està en com es representen els nombres en coma flotant en binari. C# i la majoria de llenguatges moderns segueixen l'estàndard IEEE 754 per a float i double. Els nombres decimals com 0.1 i 0.2 no poden representar-se exactament en binari, per tant la suma no és exactament 0.3 sinó un valor proper, per exemple 0.30000000000000004

Aquest petit error de representació fa que 0.30000000000000004 != 0.3 i per això la comparació amb == retorna False. Aquest comportament no és exclusiu de C#. A Python print(0.1 + 0.2 == 0.3) dona False. A JavaScript console.log(0.1 + 0.2 === 0.3) també dona False. A Java la comparació 0.1 + 0.2 == 0.3 retorna False. Totes utilitzen aritmètica en coma flotant binària i comparteixen la mateixa limitació

Què fer en lloc d'usar == directament? Una bona pràctica és comparar amb una tolerància epsilon. Per exemple una funció AreEqual(a, b, epsilon = 1e-10) pot retornar abs(a - b) < epsilon. Aquesta tècnica és la recomanada per comparar valors en coma flotant en la majoria de llenguatges

En C# quan es necessita precisió decimal, com en càlculs financers, s'ha d'usar el tipus decimal, que usa base 10 i evita els problemes d'arrodoniment intrínsecs de la representació binària. Per exemple decimal a = 0.1m; decimal b = 0.2m; llavors a + b == 0.3m serà True

Resum de bones pràctiques: no comparar nombres en coma flotant amb ==; usar una epsilon adequada per a comparacions; emprar decimal per a aplicacions monetàries o quan es requereix precisió exacta; recordar que aquest comportament prové de l'estàndard IEEE 754 i apareix en molts llenguatges

A Q2BSTUDIO som una empresa de desenvolupament de programari i aplicacions a mida especialitzada en solucions modernes. Oferim programari a mida, desenvolupament d'aplicacions a mida, implementacions d'intel·ligència artificial, ciberseguretat i serveis cloud aws i azure. Ajudem les empreses a adoptar serveis intel·ligència de negoci i ia per a empreses, crear agents IA i solucions amb power bi per millorar la visualització i anàlisi de dades

El nostre equip combina experiència en programari a mida i aplicacions a mida amb coneixements avançats en intel·ligència artificial i ciberseguretat per lliurar projectes segurs i escalables. A més proporcionem serveis cloud aws i azure per desplegar i mantenir infraestructures al núvol, i serveis intel·ligència de negoci per transformar dades en decisions

Si treballes amb nombres i models que requereixen precisió, tingues en compte les limitacions de l'aritmètica en coma flotant i aplica les tècniques adequades descrites aquí. A Q2BSTUDIO podem assessorar-te en l'elecció de tipus numèrics, en implementacions d'intel·ligència artificial, en agents IA i en integracions amb power bi perquè les teves aplicacions a mida siguin precises i fiables

Paraules clau rellevants: aplicacions a mida, programari a mida, intel·ligència artificial, ciberseguretat, serveis cloud aws i azure, serveis intel·ligència de negoci, ia per a empreses, agents IA, power bi

ELS NOSTRES SERVEIS

Com et podem ajudar

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.