在一个数字序列中统一 10^x 次方

Posted

技术标签:

【中文标题】在一个数字序列中统一 10^x 次方【英文标题】:Unify 10^x power in a sequence of number 【发布时间】:2012-08-28 18:25:46 【问题描述】:

我有一个这样的数字序列:

1.687155E21
3.981457E19
0.5532155E21 
3.018843E21
2.0532155E21 
4.5532155E21
3.1637913E19

我的问题是如何将两个以 10^19 结尾的数字转换为与其他数字一样 (10^21)。因为在这种统一之后,我需要截断数字以仅打印 3.5 之类的内容。

在 C/C++ 中我知道如何精确工作,但在 Java 中我不知道。

【问题讨论】:

你想获取一堆doubles 并将它们转换为字符串,这样它们都具有<int>.<fraction>E<exponent> 的形式,其中指数是一位整数指数的最小值所有非零值? 没有。是的,最后我需要转换成字符串,但只有一位小数。 C/C++ 中可用的大多数相同函数在 Java 中可用,尽管名称可能已更改。 【参考方案1】:

将所有数字除以/ 1e19,四舍五入到所需的小数位数:

168.7155
3.981457
55.32155
301.8843
205.32155
455.32155
3.1637913

【讨论】:

我怎样才能用我想要的十进制数字四舍五入???我想我需要分成 /1e21 因为带有 e19 的数字必须是 0 或 0.x【参考方案2】:

使用 Formatter 类将它们转换为所需的科学记数法 (java.util.Formatter)

【讨论】:

【参考方案3】:

我建议像 Tomasz Nurkiewicz 所做的那样,但不是除以 1E19 除以 1E21,而是使用 Formatter 将它们转换为具有所需精度的字符串(参见 count0 的注释),但不是科学格式,但作为一般的。最后只需将 E21 添加到这些字符串中。最后你应该得到(我希望我的想法是正确的)

1.687155E21
0.03981457E21
0.5532155E21 
3.018843E21
2.0532155E21 
4.5532155E21
0.031637913E21

【讨论】:

这是一个简单的解决方案。谢谢。在这种情况下效果很好。但我想知道如何知道一个数字的 Exx 以了解在任何未来情况下要遵循的策略。 答案很简单,而且有点数学。只需计算十进制对数 (Math.log10()) 并取其整数部分。你会得到Exx的震级。 谢谢 Vic,下次再回答很好。【参考方案4】:

您不能将E19 数字乘以10 ^ 2 = 100 吗?

将它们归一化为E21后,您应该可以将它们全部除以10^21(如果它们是浮点数),它们都将在0-9.999的范围内...

【讨论】:

是的,但问题是要检测数字是 E19 还是 E21,我不知道该怎么做。

以上是关于在一个数字序列中统一 10^x 次方的主要内容,如果未能解决你的问题,请参考以下文章

CF-Round-#560(Div.3)

检查一个数是不是可​​以表示为 x 的 2 次方之和?

打印 y 轴标题,数字提升到 10 次方和实数乘法符号

10的负10次幂用计算机怎么按?

令x(n)=[1,-2,4,6,-5,8,10],用MATLAB产生并画出下列序列的样本

x 的 x 次方等于10,求 x