c# - 如何将 Decimal 值四舍五入到一个精度,以便总位数不超过 15?

标签 c# excel math openxml-sdk

我需要将 25979.699999999997 之类的值四舍五入到 15 位数字,使其变为 25979.7 并且不包含任何无关紧要的零。

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

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

有什么想法吗?

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

最佳答案

好吧,你可以试试不那么复杂的数学:

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 中减去它得到剩余的小数位数。

关于c# - 如何将 Decimal 值四舍五入到一个精度,以便总位数不超过 15?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27967103/

相关文章:

c# - 异常 : object instance has been disposed and can no longer be used for operations that requires a connection

c++ - MSVC 和 G++ 之间奇怪的数学差异

python - 许多数组的插值的矢量化总和

javascript - 如何获取用户并将其附加到评论中,然后使用 JavaScript 发送结果以查看?

javascript - 内容安全政策

c# - 调用 FtpClient 一次以递归列出目录

excel - 宏中的 Text-To-Columns 将 24 时间转换为 12 小时格式

vba - 导出为 pdf,并在一页中包含范围选择单元格

excel - 在一列中查找类似日期然后计算最小值/最大值之间的差异的公式

javascript - 为什么这些列表项的位置不正确?