2016-09-19 106 views
2

有人可以幫助菜鳥嗎?如果我有一個4.561從公式推導出來,我怎樣才能只顯示.561而忽略4需要幫助格式化數字C++

在此先感謝。我是編程新手,這是作業的一部分。任何幫助將不勝感激。我正在編碼c++

+0

幫助我們幫助你。你在用什麼語言? –

+0

對不起。我自動承擔。這是C++。 – Nick

+0

必須有一個很好的格式化方式,但如果n = 4.561,你可以顯示n-trunc(n) –

回答

1

不知道這是你需要的,但請檢查一下。

float f = 4.561; 
f = f-(long)f; 
cout << "Value of f is : " << f << endl; 
1

我會覺得用更好的floormath.h

f = 4.561 
if (f>=0) f=f-floor(f); 
else  f=f-ceil(f); 
// here f = 0.561 

這些原因:

  1. 當你沒有對鑄件整體式控制(f-long(f))至少我不知道它是否明確定義爲使用整數部分或舍入的標準。更不用說自定義類型的實現了。

  2. 如果你的浮動值持有更大的數字,那麼你的整數類型可以保持什麼?我知道對於更大的數字,小數部分沒有那麼多的尾數位,但是如果32/64/80/128/256位或更多,那麼您沒有指定使用哪種浮動數據類型,所以很難說以及如果整數部分大於那麼你的積分數據類型用於切斷非小數部分,那麼你將遇到麻煩f-long(f)

PS。

if語句可以通過在操作之前和之後掩蔽進出符號位來避免。例如在標準的32位浮點它看起來像這樣:

float f=4.561;   // input value 
DWORD *dw=(DWORD*)(&f); // pointer to f as integer type to access bits 
DWORD m;    // sign storage 
m=(*dw)&0x80000000; // store sign bit to m 
(*dw)&= 0x7FFFFFFF; // f=fabs(f) 
f-=floor(f); 
(*dw)|=m;    // restore original sign from m 
// here f = 0.561 

如果沒有DWORD使用任何32位無符號整數,而不是