簡體   English   中英

轉換浮點值時,std::to_string 是否保證包含小數點?

[英]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似乎總是返回一個包含小數點后跟六位數字的字符串。 這種行為是否有保證(不包括naninfinity )?

根據cplusplus.com ,“根據需要編寫盡可能多的數字來表示整數部分,然后是小數點字符和六位十進制數字”。

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 樣式中的十進制表示法。

精度指定小數點字符后出現的最小位數。 默認精度為 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM