c# - 考虑到有效数字的数量,如何找到浮点值的最小有效步长?

标签 c# .net significant-digits

假设我有一组 float数字,每个数字都有 int有效数字的值。

查找每个值的最小有效步长(10 的幂)的最简单、最快的 C# 方法是什么?

<表类=“s-表”> <标题> 值 重要数字 预期结果 <正文> 1.0123 3 0.01 1.0123 4 0.001 4525 2 100 0.007589 1 0.001 42 1 10

*以粗体标记每个值的有效数字。

我很想使用Math.Log10()不知何故,但我还不知道如何。

最佳答案

一种解决方案:

static float MinimumSignificantStep(float number, int significantFigures)
    => (float)Math.Pow(10, Math.Floor(Math.Log10(Math.Abs(number))) - significantFigures + 1);

如果有更快的解决方案,我不会感到惊讶。

请记住, float 可能会令人惊讶,因为它们存储为二进制数乘以 2 的幂,这并不总是与我们通常使用的 10 的幂很好匹配。因此,预计 0.999999、0.0001 或靠近边缘的类似数字最终会得到“错误”的位数。

关于c# - 考虑到有效数字的数量,如何找到浮点值的最小有效步长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76732568/

相关文章:

r - 地板和天花板有 2 位或更多有效数字

.net - 使用任务计划程序在Windows上计划.Net Core控制台应用程序

java - 我应该为 Java 中的双文字使用多少位有效数字?

ruby - 如何在 Ruby 中将 float 舍入到指定数量的有效数字?

c# - C# 中的 Async Func - 正确的 async await 用法

c# - 这是定期异步下载的好代码吗?

c# - 如何防止按键更新 MaskedTextBox 的文本?

c# - Linq 小组通过奇怪地表现

c# - 一个对象只能在 linq 查询中实例化一次吗?

c# - 将 double 组转换为字节数组