将double设置为文字,然后进行比较是否安全?

时间:2018-10-30 15:18:59

标签: c# precision

例如

double x = -1;
TrySetX(ref x);
if(x == -1)
    //since x == -1, it obviously wasn't set
    TryADifferentWayToSetX(ref x);

Use(x);

在x不变的情况下,x == -1总是返回true,还是我必须使用epsiolon进行比较?

这里的逻辑是,两个文字都可能会被转换为相同的值,因此无需担心它们可能会失去精度。

1 个答案:

答案 0 :(得分:0)

尝试一下,看起来两个文字都转换为相同的值。因此,比较是安全的:

这是我写的一个小测试

public class Program
{
    public static void Main(string[] args)
    {
        double x = 3.455678756567656765677812345678912345678901234567890123456789009876543223456798765423456709876512345;
        System.Console.WriteLine(x);
        System.Console.WriteLine(x == 3.455678756567656765677812345678912345678901234567890123456789009876543223456798765423456709876512345);
    }
}

该数字足够长,精度会损失很多,但是会打印

3.45567875656766
True

因此确实存在精度损失,但是比较仍然有效。