簡體   English   中英

std::to_string(double) 的精度

[英]The precision of std::to_string(double)

使用std::to_string()將 double 轉換為字符串時,有沒有辦法設置結果的精度?

不。

返回:每個函數返回一個字符串對象,該對象保存其參數值的字符表示,該對象將通過調用sprintf(buf, fmt, val) ,格式說明符為"%d" , "%u" , "%ld""%lu""%lld""%llu""%f""%f""%Lf" ,其中 buf 指定足夠大小的內部字符緩沖區。

我認為,使用std::stringstreamsetprecision將是最靈活的/便攜的選擇,但如果你知道你的數據,作為一種解決方法,您可以嘗試子字符串to_string結果。 例如:

std::string seriesSum(int n)
{
    double sum = 0, div = 1;
    for(int i = 0; i < n; i++) {
      sum += 1.0 / div;
      div += 3;
    }

    return std::to_string(round(sum * 100)/100).substr(0,4);
}

在上面的代碼中,我通過取字符串的前 4 位數字來打印兩個小數位0.00 ,但它僅有效,因為我知道整數部分永遠不會超過一位數。 您還可以使用string.find()來搜索小數點分隔符並使用它的位置來計算子字符串的大小,使其更具動態性。

我只是在尋找解決方案,因為我正在重載std::cout <<運算符,因此執行std::stringstream解決方法會很棘手。 我通過使用std::substr()函數來定位小數點並在小數點后面選取選定數量的數字來解決我的問題。

std::string trimmedString = std::to_string(doubleVal).substr(0, std::to_string(doubleVal).find(".") + precisionVal + 1);

這將在您的數字后為您提供“precisionVal”0。

前任:

double doubleVal = 3;
int preisionVal = 2

3.000000變成3.00

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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