C語言控制double型輸出小數點保留尾數的疑惑,求大大神們

2021-03-22 08:33:03 字數 5865 閱讀 4590

1樓:_奧丁信使

double res=(int)n;

printf("%.nlf",res);

強制轉換型別,會有警告,但一般不用理會

望採納。

2樓:

#include

void main()

輸出結果為:1123.12

c++語言程式設計操作。 要求輸出小數點後兩位,我用double定義,最後輸出時

3樓:

給你舉個例子就妥了:

至於你的為什麼錯,因**不全,我沒有看明白。

4樓:匿名使用者

用計算後轉成字串。

double f1;

f1=1234.5678;

string s1;

//sprintf(s1,"%8.2f",f1);

sprintf(s1, "%*.*f", 10, 2, f1);

cout<者:

#include

#include

using namespace std;

int main( void )

5樓:匿名使用者

c++對輸出的格式化控制:

首先要包含標頭檔案,#include ,當然還有命名空間std。

按照msdn的說明這個標頭檔案有以下幾個方法:

setprecision預設保留6位數,包括整數部分和小數部分,不包括小數點。若指定長度,則從高位到地位計算到指定長度截至。

setw設定顯示時候的長度,如果資料長度大於設定的長度,則按資料長度實際顯示。若小於設定的長度,則在前導預設補充空格,可以使用setfill設定前導填充字元。

這是msdn官方的例子,你體會下:

#include

#include

using namespace std;

const double   d1 = 1.23456789;

const double   d2 = 12.3456789;

const double   d3 = 123.456789;

const double   d4 = 1234.56789;

const double   d5 = 12345.6789;

const long      l1 = 16;

const long      l2 = 256;

const long      l3 = 1024;

const long      l4 = 4096;

const long      l5 = 65536;

int         base = 10;

void displaydefault( )

void displaywidth( int n )

void displaylongs( )

int main( int argc, char* argv )

對應的執行結果如下:

如果要指定小數字後面幾位顯示,可以有以下幾種方式:

1 - c語言

printf("%.2f\n", 3.1415926);

2 - c++語言

cout << fixed << setprecision(2) << 3.1415926 << endl;

cout << setprecision (2);

cout.setf(ios::fixed,ios::floatfield);

cout << 3.1415926 << endl;

順便在此奉上一張從網上down下的圖表,應該能讓你更清楚了

★ 進來看下,複試分數線的疑惑,謝謝回答了...

6樓:匿名使用者

這個只是大類的最低要求線。主要是看單科是否夠線的。

基本上不會有什麼專業方向是以這個來划複試線。

如果正好考到這個分八成要被刷(這個要看報考的專業方向了),就算初試沒被刷複試也凶多吉少。

所以很多記者會以這個線、還有國家線來炒作。

c語言或者liunx系統中有沒有函式,控制double型別的數值計算後結果保留2位小數。

7樓:韌勁

c語言中float,double型別,在記憶體中的結構(儲存方式)

從儲存結構和演算法上來講,double和float是一樣的,不一樣的

地方僅僅是float是32位的,double是64位的,所以double能儲存更高的精度。

任何資料在記憶體中都是以二進位制(0或1)順序儲存的,每乙個1或0被稱為1位,而在x86cpu上乙個位元組是8位。比如乙個16位(2 位元組)的short int型變數的值是1000,那麼它的二進位制表達就是:00000011 11101000。

由於intel cpu的架構原因,它是按位元組倒 序儲存的,那麼就因該是這樣:11101000 00000011,這就是定點數1000在記憶體中的結構。

目前c/c++編譯器標準都遵照ieee制定的浮點數表示法來進行float,double運算。

這種結構是一種科學計數法,用符號、指數和 尾數來表示,底數定為2——即把乙個浮點數表示為尾數乘以2的指數次方再添上符號。

下面是具體的規格:

型別 符號位 階碼 尾數 長度

float 1 8 23 32

double 1 11 52 64

臨時數 1 15 64 80

由於通常c編譯器預設浮點數是double型的,下面以double為例: 共計64位,折合8位元組。

由最高到最低位分別是第63、62、61、……、0位: 最高位63位是符號位,1表示該數為負,0正; 62-52位,一共11位是指數字; 51-0位,一共52位是尾數字。

按照ieee浮點數表示法,下面將把double型浮點數38414.4轉換為十六進位制**。

把整數部和小數部分開處理:整數部直接化十六進位制:960e。

小數的處理: 0.4=0.

5*0+0.25*1+0.125*1+0.

0625*0+…… 實際上這永遠算不完!這就是著名的浮點數精度問題。所以直到加上前面的整數部分算夠53位就行了(隱藏位技術:

最高位的1 不寫入記憶體)。

如果你夠耐心,手工算到53位那麼因該是:38414.4(10)=1001011000001110.0110101010101010101010101010101010101(2)

科學記數法為:1.001……乘以2的15次方。

指數為15! 於是來看階碼,一共11位,可以表示範圍是-1024 ~ 1023。因為指數可以為負,為了便於計算,規定都先加上1023,在這裡, 15+1023=1038。

二進位制表示為:100 00001110 符號位:正—— 0 !

合在一起(尾數二進位制最高位的1不要): 01000000 11100010 11000001 11001101 01010101 01010101 01010101 01010101 按位元組倒序儲存的十六進位製數就是: 55 55 55 55 cd c1 e2 40。

8樓:匿名使用者

在c++中輸出乙個浮點數n,並保留指定的小數字數,應該怎麼處理呢?首先先把iomanip標頭檔案包含進來,然後對浮點數n按下列操作輸出(假設保留2位小數):

cout<

c中還真的不記得,你可以看看這個函式對照下,自己寫乙個。

9樓:匿名使用者

沒有四捨五入的話,要手動在後面加上

a = floor(a*100 + 0.5)/100.0;

10樓:匿名使用者

你是要把這個數繼續作為變數使用麼?

可以這樣子:

char sztmp[30] = "\0";

sprintf(sztmp, "%.2lf", a);

a = atof(sztmp);

這樣,兩位小數後面的都沒去掉了;

但是列印顯示的話 還是要用%.2lf,不然後面還是會有很多0,這是數值的精度位數;

11樓:昔拉

printf("a=%.2f",a);

.2f前面是有個小數點的,

還有什麼問題嗎

12樓:匿名使用者

printf("a=%.2f",a);

double型別,小數點後的位數

13樓:匿名使用者

double型別是雙精度浮點數,佔用8位元組(byte)即64位(bit),其精度是由32個bit的二進位制尾數來確定的,因此準確精度是二進位制精度而不是十進位制精度,通常可以保證十進位制小數點後15位有效精度和第16位的部分精度。

通過格式化方法輸出double型別,可以控制小數點後的顯示位數:astr.format("%.

2f",a);在百分號後面加上.x 就是指定小數點後的顯示位數。注意這種方法不是四捨五入,而是截斷顯示,1.

239會顯示為1.23;

如果需要四捨五入,在c/c++中沒有專門的函式,你可以這樣實現:astr.format("%.2f",a+0.005);再捨去位加上5,再截斷的時候就等於是四捨五入了。

拓展資料:

visual basic 支援幾種 numeric 資料型別— integer(整型)、long(長整型)、single(單精度浮點型)、double(雙精度浮點型)和 currency(貨幣型)。與 variant 型別相比,numeric 型別佔用的儲存空間通常要少。

如果知道變數總是存放整數(如 12 )而不是帶小數點的數字(如 3.57),就應當將它宣告為 integer 型別或 long 型別。整數的運算速度較快,而且比其它資料型別佔據的記憶體要少。

在 for...next 迴圈內作為計數器變數使用時,整數型別尤為有用。

如果變數包含小數,則可將它們宣告為 single、double 或 currency 變數。currency 資料型別支援小數點右面 4 位和小數點左面 15 位;它是乙個精確的定點資料型別,適用於貨幣計算。浮點(single 和 double)數比 currency 的有效範圍大得多,但有可能產生小的進製誤差。

浮點數值可表示為 mmmeeee 或 mmmdeee ,其中 mmm 是假數,而 eee 是指數(以 10 為底的冪)。single 資料型別的最大正數值為 3.402823e+38,或 3.

4 乘以 10 的 38 次方;double 資料型別的最大正數值是 1.79769313486232d+308 或 1.8 乘以 10 的 308 次方。

用 d 將數值文字中的假數部分和指數部分隔開,就會導致將該值作為 double 資料型別來處理。同樣,用這種方式使用 e,也會導致將該值作為 single 資料型別來處理。

14樓:2c1忘乎所以

cstring astr;

double a=1234.567890;

astr.format("%2f",a);

setdlgitemtext(idc_a,astr);

將輸出改為%2lf,即保留小數點後兩位

雙精度浮點型,此資料型別與單精度資料型別(float)相似,但精確度比float高,編譯時所佔的記憶體空間依不同的編譯器而有所不同,是double float資料型別,c/c++中表示實型變數的一種變數型別。

此資料型別與單精度資料型別(float)相似,但精確度比float高,編譯時所佔的記憶體空間依不同的編譯器而有所不同,通常情況,單精度浮點數佔4位元組(32位)記憶體空間,其數值範圍為-3.4e38~3.4e+38,;雙精度型佔8 個位元組(64位)記憶體空間,其數值範圍為-1.

7e308~+1.7e308。

c語言輸出浮點型資料輸出,C語言輸出浮點型資料輸出

在c語言中可以通過精度限定符來控制浮點數輸出的位數,精度限定符有乙個點號後跟乙個整數組成。其準確含義依賴於它所修飾的資料型別。示例如下 include int main include int main int argc,char argv include int main void sprintf...

c語言中int型與double型能進行換算加減乘除嗎

能進bai行,不會錯,系統實際會把du參加運zhi算的所有變數轉換為double後進dao行計算專,只要表示式屬裡面有乙個float或者double的量,例如 int i 1 float x 5,y y x i 執行的時候系統會把x和i都轉換為double進行計算,最後的結果再儲存為y的double...

看了個例子c語言中輸出lg是double型的那這裡

lg並不是任何字元的縮寫,而是乙個特定的格式字元。說明如下 lg的效果為,根據double型別資料的值,自動選擇以實數形式輸出,或者是以科學計數法輸出。對double輸出可以選擇以實數方式輸出,格式為 lf。當用 lf時,輸出為 形式。也可以選擇以科學計數法形式輸出,格式為 le,當使用 le時,輸...