2013-05-22 54 views
0

我需要刪除小數點後的數字,但不是全部。刪除C++中小數點後的一些數字

例如,雙挖= 3.1459038585我需要將其轉換爲挖= 3.14

我想我需要多掏100然後將其轉換爲整數,然後再轉換爲加倍和刪除100(全這將是1行)。但是有沒有什麼功能可以更快地做到這一點?

+1

見http://stackoverflow.com/questions/4030190/rounding-to-the-second-decimal-spot – devnull

+0

其打印,我想寫PS這樣的答案。我需要刪除數字並在計算中使用新數字。 – EmiX

+0

@devnull該問題是關於格式化輸出,而不是關於內部處理。 –

回答

3
#include <cmath> 
#include <iostream> 
int main() 
{ 
    double d = 3.1459038585; 
    std::cout << std::floor(d * 100.)/100. << std::endl; 
} 
+0

這實際上是不正確的,因爲它不會正確處理底片。如果您翻轉d上的標誌,它將返回-3.15。尼爾斯的版本是(幾乎)正確 – Corvin

+0

@Corvin:這是一個常見的誤解。 [有很多不同類型的舍入](https://en.wikipedia.org/wiki/Rounding#Tie-breaking)。上面的方法只是展示了一種舍入方式,可能會或可能不適合您的用例。 –

2

實現此功能的任何函數都將更加靈活,因此定義會更慢。所以,是的,就這樣寫:

double truncated = (double)((int)dig*100)/100; 

它的所有CPU的本地操作任何方式所以它會花費幾乎任何時鐘週期,尤其是內聯或用作宏。

+0

正確,但一個小錯字。它應該是(double)((int)(dig * 100))/ 100 - 注意(int)後的括號。否則,dig會在它被乘以之前被轉換(截斷) – Corvin