用指数舍入一个双精度值

Posted

技术标签:

【中文标题】用指数舍入一个双精度值【英文标题】:Rounding a double value With Exponent 【发布时间】:2016-08-22 08:21:34 【问题描述】:

例如,我有一个双精度值 0.000034,我想要一个双精度值 3.40E-5(请注意,所需的第二个值也是双精度值而不是字符串)。到目前为止,我发现的所有结果都将值转换为不打算使用的字符串格式。我的图表程序有双打列表。

Image of the resulted Chart

我已经添加了图片。此处黄色突出显示的行显示 0(百分比),但实际上这是我想在此处显示的一个非常非常小的数字。但它只是显示为 0,这不是预期的。

提前致谢。

【问题讨论】:

3.40E-5 纯粹是double 的字符串表示形式。 想对图表中的值做什么? 虽然我没有投反对票,但是你的帖子根本就是少了一个“问题” 你的调试器显示值有问题吗??? 【参考方案1】:

0.000034 和 3.40e-5 只是声明具有相同值的相同变量的两种不同方式,它与舍入无关。只有当您将值表示为字符串时,您才会看到“E”。因此,如果您像下面这样声明 2 个变量,它们将具有相同的值;

double value1 = 0.000034;
double value2 = 3.40e-5;

【讨论】:

确实你可以做到这一点而且不会失败:Debug.Assert(0.000034 == 3.40e-5); “只有当你将值表示为字符串时,你才会看到“E”。”不是正确的陈述,如果我将双精度数舍入到多于 2 的小数位,我也会看到它。 你在哪里看到的? Visual Studio 调试器还向您显示字符串表示形式的值。实际值以如下所述的方式存储在内存中:en.wikipedia.org/wiki/Double-precision_floating-point_format 如果您编写类似 (3.40e-5).ToString("F15") 的内容,您将在双精度变量中获得 15 个小数

以上是关于用指数舍入一个双精度值的主要内容,如果未能解决你的问题,请参考以下文章

舍入双精度值并转换为整数

在java中将双精度值舍入为两位有效数字[重复]

变体浮点到双精度值转换,舍入到小数点后 1 位 [重复]

将双精度值舍入为 2 位十进制数字 [重复]

如何处理 vb.net 中双精度数的舍入错误?

如何优化 spark 函数以将双精度值舍入到小数点后 2 位?