如何将十进制值舍入到精度,以使总位数不超过15?

时间:2015-01-15 15:36:45

标签: c# excel math openxml-sdk

我需要将25979.699999999997之类的值舍入为15位数,因此它变为25979.7并且不包含任何无关紧要的零。

背景: 我正在尝试使用OpenXML SDK解析excel文件,并且有一个十进制值,如25979.7,读作25979.699999999997.。

当MS excel显示该值时,它总是将它们舍入为15位并删除尾随零,因此它变为25979.7,但是当我使用OpenXML SDK进行读取时,它不会自动执行此操作。

有什么想法吗?

编辑:其实我不想修改该值,只想以该格式显示(作为字符串)。

2 个答案:

答案 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格式化将为您完成所有工作。