我怎样才能十进制值的精度达到一个精度,使数字的总数不跨越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中减去它给我们剩余的小数位四舍五入。