2015-03-25 80 views
1

有了下面的代碼,std :: to_string保證在轉換浮點值時包含小數點嗎?

int main() { 
    for(;;) { 
     float d; 
     cin >> d; 
     cout << std::to_string(d) << endl; 
    } 
} 

to_string似乎總是返回包含小數點後面六位數字的字符串。這種行爲是否有保證(不包括naninfinity)?

根據cplusplus.com,「根據需要寫入儘可能多的數字來表示整數部分,後跟小數點字符和六位十進制數字」。

回答

3

to_string似乎總是返回一個字符串,其中包含小數點後跟六位數字。這種行爲是否有保證(不包括naninfinity)?

是的。的std::to_string輸出由輸出std::sprintf,其默認精度爲6

http://en.cppreference.com/w/cpp/string/basic_string/to_string控制,

7,8)浮點值轉換爲字符串,與同樣內容的std::sprintf(buf, "%f", value)會產生足夠大的buf

http://en.cppreference.com/w/cpp/io/c/fprintf,(重點煤礦)

F,F

浮點數轉換爲在樣式的十進制符號[ - ] ddd.ddd。

Precision指定小數點後面出現的最小位數。 默認精度爲6

+1

我想補充以下幾招:http://stackoverflow.com/questions/16605967/set-precision-of-stdto-string-when-converting-floating-point-values?rq=1 – user3159253 2015-03-25 05:09:17

+0

這是毫無疑問,規則是有效的......但爲什麼有關「sprintf」的「替代實現」的評論爲'to_string'提供了保證? – 2015-03-25 05:12:34

+0

@BenVoigt,*替代實現*與答案無關。我會刪除它。 – 2015-03-25 05:22:53