我需要将25979.699999999997之类的值舍入为15位数,因此它变为25979.7并且不包含任何无关紧要的零。
背景: 我正在尝试使用OpenXML SDK解析excel文件,并且有一个十进制值,如25979.7,读作25979.699999999997.。
当MS excel显示该值时,它总是将它们舍入为15位并删除尾随零,因此它变为25979.7,但是当我使用OpenXML SDK进行读取时,它不会自动执行此操作。
有什么想法吗?
编辑:其实我不想修改该值,只想以该格式显示(作为字符串)。
答案 0 :(得分:3)
嗯,你可以尝试不那么复杂的数学:
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减去它给我们剩下的小数位数来舍入。
答案 1 :(得分:1)
只需格式化(修改后的)值即可获得格式正确的字符串:
double val = double.Parse("25979.699999999997");
string formatted = val.ToString("g");
g
格式化将为您完成所有工作。