如何向下缩放像 1.9416746607144E+36 这样的双精度,以便我可以在 winForms 图表中使用

本文关键字:我可以 winForms 双精度 缩放 9416746607144E+36 | 更新日期: 2023-09-27 18:31:50

我有一个双数组的数字,包括以下内容以及类似范围内的更多数字。

1.9416746607144E+36、3.35084834769439E+35、1.61781076604004E+36、4.4117087319933E+35、1.53778814885709E+36、6.71296251346301E+

35、1.20117826215991E+36 等。

如何缩小这些内容,以便使用它们绘制窗口窗体图表?

我尝试使用以下方法缩小规模:

    public static double SetSigFigs(double d, int digits)
    {
        double scale = Math.Pow(10, Math.Floor(Math.Log10(Math.Abs(d))) + 1);
        return scale * Math.Round(d / scale, digits);
    }

这对数字没有任何影响。

如何向下缩放像 1.9416746607144E+36 这样的双精度,以便我可以在 winForms 图表中使用

有许多方法可以将范围 [0:10e36] 映射到范围 [0:1](或您想要的任何一致系统)。

你应该问的第一个问题是:这么大的值实际上代表什么,如果我有 1E24、1E34 和 1E36 作为"合法"值,我希望在图表上看到什么。

最简单的答案是在上面的 dbugger 的评论中,用一个简单的划分来重新缩放范围,但根据您的用例(很少有事情最终会有一个那么大的合法数字,检查下溢或几乎div-0 错误),然后像 log(x) 或 x^(1/4)/10e6 重新缩放函数这样的重新缩放函数可能更合适。

地球上只有7.1e9人,地球重5.98*10e24公斤,宇宙预计在3e20毫秒(100亿年)左右存在,宇宙中也有大约10e20颗恒星。

关键是 10e36 不代表任何类型的物理事物,因此也许弄清楚您要绘制的内容将帮助您描述如何将这些数字转换为合理的绘图范围。