我怎样才能十进制值的精度达到一个精度,使数字的总数不跨越15?

我需要将25979.699999999997这样的值整理成15个数字,所以它变成了25979.7,并且不包含任何微不足道的零。

背景:我试图parsing一个使用OpenXML SDK的Excel文件,并且有一个十进制值,如25979.7读为25979.699999999997。

当MS excel显示值时,它总是舍入到15位数,并删除尾随的零,所以它变成25979.7,但是当我使用OpenXML SDK读取时,它不会自动执行。

任何想法?

编辑:其实我不想修改的价值,只是想显示在该格式(作为一个string)。

简单地格式化(修改)的值,以得到一个很好的格式string:

 double val = double.Parse("25979.699999999997"); string formatted = val.ToString("g"); 

g格式将为你做所有的工作。

那么,你可以不要这么复杂的math:

 var x = 25979.699999999997; var y = Math.Round(x, 15 - (int)Math.Floor(Math.Log10(x) + 1)); 

y会完全25979.7

这里我们计算小数点前的位数为

 Math.Floor(Math.Log10(x) + 1) 

并从15中减去它给我们剩余的小数位四舍五入。