2009-12-22 35 views
0

我想转换指数编号5.52794e + 15。如何将指数格式转换为c中的十进制格式

+0

我将它转换为“int no。”,没有发生任何有趣的事情。 :-( – 2009-12-22 16:39:42

+0

换句话说,请提出一个问题,并提出一些有意义的问题,同时告诉我们你想做什么以及为什么。 – 2009-12-22 16:40:15

回答

2

它不适合在int,但long long会做:

long long x = 5.52794e+15; 
2

替代:你想打印它作为一个整数。

double d = 5.52794e+15; 
printf("%15.0lf\n",d); 

给出:

5527940000000000 
-1

长长×= 5.52794e + 15; 其中指数“15”必须是整数,系数5.52794是任何实数,甚至可以是整数。 尾数的最大值刚好超过32,000,000任何高于此的值都将被截断。 如果你有一个运行总数,并且以小的值加入并保持精确的总数,这就变得很重要。 - 例如,您添加的值不是整数时的用电量。

+0

虽然我没有给你降低成绩,但我并不感到惊讶你害怕,我不明白你在哪里得到尾数限制在3200万的想法;它对于一个4字节的浮点值是有意义的,但5.52794e + 15是双倍的,而且你通常会得到比32M评论暗示的更多的精度数字。关于保持总计值是双重担心的想法,但与这个特定上下文无关。 – 2009-12-22 20:29:35

1

除了使用long long,您还可以:

使用压缩的十进制库。

您可以在标准int或long中使用对数(或几何等)缩放。

使用int结构,表示有效数和指数,并手动(或使用一个好的库)进行浮点数学运算。

我已经使用了所有三种方法,它们都有其起伏。 Packed Decimal最慢也最准确。对数缩放是迄今为止最快和最容易实现的,并且最不准确。通过整数重现浮点数在性能之间,精确度与“实际”浮点数基本相同,最难实现。

所有3个比使用浮点硬件慢 - 假设你的硬件有浮点!

相关问题