Home > Backend Development > C++ > Why Doesn't `x == 0.1` Always Work with C#'s `double` Data Type?

Why Doesn't `x == 0.1` Always Work with C#'s `double` Data Type?

Linda Hamilton
Release: 2025-01-22 20:46:11
Original
657 people have browsed it

Why Doesn't `x == 0.1` Always Work with C#'s `double` Data Type?

C# double Comparisons: Precision Issues

Working with floating-point numbers (like C#'s double type) often presents unexpected challenges when comparing values. A common example is comparing a double variable to 0.1:

<code class="language-csharp">double x = 0.1;
if (x == 0.1) { /* Code */ }</code>
Copy after login

This seemingly simple comparison might surprisingly fail.

Understanding the Problem: Binary vs. Decimal Representation

The root cause lies in how floating-point numbers are stored. double values are stored as binary fractions, not decimal fractions. This means that many decimal values, including 0.1, cannot be precisely represented as a binary fraction. The computer stores an approximation instead, leading to subtle differences that affect comparisons.

The Solution: Using the decimal Data Type

To avoid this precision issue, use the decimal data type. decimal values are stored using decimal notation, allowing for exact representation of numbers like 0.1.

<code class="language-csharp">decimal x = 0.1m;
if (x == 0.1m) { /* Code */ }</code>
Copy after login

Using decimal ensures accurate storage and comparison of 0.1.

Floating-Point Representation: A Deeper Look

To illustrate the problem, consider decimal representation. 12.34 is:

<code>1 * 10^1 + 2 * 10^0 + 3 * 10^-1 + 4 * 10^-2</code>
Copy after login

Similarly, 0.1 is:

<code>1 * 10^-1</code>
Copy after login

However, in binary, some numbers (like 1/10, or 0.1 decimal) lack a precise representation. They are approximated, leading to the discrepancies that cause unexpected results in comparisons. This approximation is why x == 0.1 might fail when x is a double.

The above is the detailed content of Why Doesn't `x == 0.1` Always Work with C#'s `double` Data Type?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template