【发布时间】:2016-02-25 06:56:14
【问题描述】:
请看下面我的例子。
float maxFloat = float.MaxValue;
string s = maxFloat.ToString();
float result = float.Parse(s); // same with Convert.ToSingle(s);
bool mustEqual = (maxFloat == result);
// It returns FALSE, why?
【问题讨论】:
-
Dmitry 有答案,但请注意,比较浮点数是否完全相等几乎总是一个错误——您应该选择所需的精度,确保它在给定数据类型的能力范围内,并且只对给定的精度进行比较。
-
@Luaan 如果您确保往返不会更改值,这不是一个错误,这是您的序列化和反序列化所需的有效内容。即使以后的计算由于四舍五入而不能完全预测,也没有理由接受可能精确的步骤(例如浮点数 -> 字符串 -> 浮点数往返)的舍入误差。
-
比较浮点值是否相等几乎是总是一个错误。
标签: c# string floating-point