2010-08-01 211 views
8

有沒有辦法將浮點數舍入到2點?例如:3576.7675745342556變成3576.76限制浮點精度?

+4

你的意思是顯示或計算? – 2010-08-01 21:30:53

+2

3576.7675745342556變成3576.77,不是嗎? – Vladimir 2010-08-01 21:43:36

+2

@弗拉基米爾:不要緊張。舍入是一個模糊的術語,它包含了幾個不同的操作,它們具有更精確的含義。向上/向下舍入/朝向零/朝向無窮遠/朝向最接近的整數等 – 2010-08-01 21:51:38

回答

12
round(x * 100)/100.0 

如果你必須讓事情變得漂浮:

roundf(x * 100)/100.0 

柔性版使用標準庫函數:

double GetFloatPrecision(double value, double precision) 
{ 
    return (floor((value * pow(10, precision) + 0.5))/pow(10, precision)); 
} 
+3

請注意,因爲二進制浮點不能完全表示大多數小數值,所以當您開始仔細檢查較低位時,此答案將不起作用。但是,然後再也沒有任何其他答案。 – 2013-05-18 01:28:48

2

乘以100,輪整數(反正你想要的),除以請注意,由於1/100不能精確表示爲浮點數,因此請考慮保留固定精度整數。

+1

小數定點整數很可能是這裏真正的答案。 – caf 2010-08-02 02:20:27

-5
yourFloatNumber= Float.Round(yourFloatNumber,2); // In C# 
+4

這在Java中有效。如果仔細觀察,海報用c/C++標記了它。 – carlsborg 2010-08-01 21:55:37

13

如果您要打印出來,請改用可用的打印格式化功能。

在C++

cout << setprecision(2) << f; 

四捨五入渲染到GUI,使用std :: ostringstream

+5

千萬不要參照「如上所述」提供的其他答案。顯示答案的順序隨着時間的推移以及根據用戶可配置的偏好(按時間或票數排序)而變化。爲了解決您的特定問題,可以使用「floor」或「ceil」來代替整型。 – 2010-08-01 23:49:07

+1

爲什麼不使用'printf'? – Svante 2010-08-02 01:25:02

+1

@Svante,因爲我們正在使用C++? – Craig 2010-08-02 01:48:02

2

不要使用浮動。如果要打印美元,請使用存儲美分數的整數並在最後2個地方打印小數點。花花公子幾乎總是錯誤的爲錢,除非你做簡單的計算(如天真的經濟數學模型),其中只有數量的大小真正重要,你永遠不會減去附近的數字。

0

爲了限制精度:
如果x是一個浮子,沒有舍入:
(升檔由2張十進制數,剝去分數,由2位十進制數下移)

((int)(x*100.0))/100.0F 

浮法瓦特/舍入:

((int)(x*100.0 + 0.5F))/100.0F 

雙人的w/o四捨五入:

((long int)(x*100.0))/100.0 

雙人瓦特/舍入:

((long int)(x*100.0 + 0.5))/100.0 

注:由於x是一個floatdouble,小數部分總是存在的。這是#如何代表(IEEE 754)和#的精度之間的差異。
C99支持round()

0

嘗試使用

std::cout<<std::setprecision(2)<<std::cout<<x;

應該作品,只有2浮點數字後出現。

2

對於那些你使用Google,好像我是格式化浮動錢:

#include <iomanip> 
#include <sstream> 
#include <string> 

std::string money_format (float val) 
{ 
    std::ostringstream oss; 

    oss << std::fixed << std::setfill ('0') << std::setprecision (2) << val; 

    return oss.str(); 
} 
// 12.3456 --> "12.35" 
// 1.2 --> "1.20" 

你必須返回作爲一個字符串。把它放回浮標將失去精度。

0

試試這個,它工作在它完美

float=3576.7675745342556; 
printf("%.2f",float); 

改變一些對象來參觀和學習的代碼。