![](/img/trans.png)
[英]Can the standard library to_string function work for the smallest floating point values?
[英]Is std::to_string guaranteed to include a decimal point when converting floating point values?
使用下面的代碼,
int main() {
for(;;) {
float d;
cin >> d;
cout << std::to_string(d) << endl;
}
}
to_string
似乎總是返回一個包含小數點后跟六位數字的字符串。 這種行為是否有保證(不包括nan
和infinity
)?
根據cplusplus.com ,“根據需要編寫盡可能多的數字來表示整數部分,然后是小數點字符和六位十進制數字”。
to_string
似乎總是返回一個包含小數點后跟六位數字的字符串。 這種行為是否有保證(不包括nan
和infinity
)?
是的。 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 樣式中的十進制表示法。
精度指定小數點字符后出現的最小位數。 默認精度為 6 。
小數點並非在所有語言環境中都用作小數點標記。 根據區域設置,您可能會得到不同的小數點字符。 但是無論語言環境如何,都會有一個小數點標記。
不可以。小數點也可以是逗號,具體取決於運行程序的計算機(在 Linux 上由$LANG
控制,在 Windows 上由其他方式控制)。 C++ 文檔說:
std::to_string 依賴當前語言環境進行格式化
這意味着,例如在德國運行時,std::to_string 使用逗號,而在美國計算機上運行時,它使用點作為分隔符。 要將點強制為小數分隔符,您必須在調用to_string之前設置語言環境:
#include <clocale>
std::setlocale(LC_NUMERIC, "C")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.