2009-12-22 59 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個比使用浮點硬件慢 - 假設你的硬件有浮點!

相關問題