浮点数的表达方式利用整数位和小数位计算的2n数值(n可正可负)计算,必然出现不准确。1.5可精确表示,0.3却无法精确表示。有的书籍上提到,浮点数不要用==或!=判断,其实是考虑有不精确表达的可能。在商业银行金融领域,这是不能容忍的。
- COBOL编程语言是上古时期可以处理小数精确度很好的一门语言,因为它真的用模拟的形式保存小数点和小数位,而非IEEE 754这种压缩版。
- C#引入了decimal类型处理小数点更精确。如下两种不同类型变量输出的结果第一个会更精确。
decimal d = 3.14159265124m;
float f = 3.14159265123f;
浮点数操作丢失精度
- C# 提供了round-trip格式符R或者r可以确保浮点数在运算过程中没有丢失精度。
例如 string s = string.Format("{0:R}", float_val), 字符串s在后面被重新解析成浮点数不会改变。
