91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++?float轉std::string小數位數控制問題怎么解決

發布時間:2022-11-09 09:17:03 來源:億速云 閱讀:193 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“C++ float轉std::string小數位數控制問題怎么解決”,內容詳細,步驟清晰,細節處理妥當,希望這篇“C++ float轉std::string小數位數控制問題怎么解決”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

float轉std::string 小數位數控制

std::stringstream 方式

    float a = 1122.334455;
    std::stringstream buf;
    buf.precision(2);//覆蓋默認精度
    buf.setf(std::ios::fixed);//保留小數位
    buf << a << "文字";
    std::string str;
    str = buf.str();

sprintf 方式

    float a = 1122.334455;
    char* chCode;
    chCode = new(std::nothrow)char[20];
    sprintf(chCode, "%.2lf", a);// .2 是控制輸出精度bai的,兩位小數
    std::string strCode(chCode);
    delete []chCode;

string轉float顯示位數有誤;cout 的 precision 成員函數

問題描述

在進行string轉float過程中,發現有些數顯示位數不同(存在數精度少了一位的情況,例如:0.1285354 轉換后,顯示 0.128535)

數據如下:

0.0281864
-0.0635702
0.0457153
0.1285354
-0.0254498
...

問題分析

后了解到 float 只顯示有效位數 6 位, 而 double 顯示有效位數 15 位

  • float有效數字位為6 &ndash; 7位,字節數為4,指數長度為8位,小數長度為23位。取值范圍為 3.4E-38~3.4E+38。

  • double有效數字位為15 &ndash; 16位,字節數為8,指數長度為11位,小數長度為52位。取值范圍為1.7E-308~1.7E+308。

隨即思考,是不是轉換后賦值到了float上,導致精度降低呢?

馬上修改賦值到double類型上,然而任然顯示有誤。

這才想到會不會使 cout 輸出精度的問題,搜索后發現 cout 需要調用 precision() 成員函數來設置顯示精度,而 cout 默認精度為6位有效數字,哈哈真是湊巧,跟 float 精度一樣。

修改后代碼如下:

#include <iostream>
#include <string>
#include <string.h>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[]) {
    const string tmp_str = "0.1285354";
    float tmp_f = 0;
    double tmp = 0;
    cout.precision(16);
    cout << sizeof(tmp_f) << "--" << sizeof(tmp) << endl;
    cout << stof(tmp_str) << endl;
    cout << stod(tmp_str) << endl;
    cout << stold(tmp_str) << endl;
    cout << strtod(tmp_str.c_str(), NULL) << endl;
    cout << atof(tmp_str.c_str()) << endl;
    tmp = 0.1234567890123456;
    cout << tmp << endl;
    return 0;
}

程序輸出

nvidia@nx:~/pengjing/cuda$ ./location 
4--8
0.1285354048013687
0.1285354
0.1285354
0.1285354
0.1285354
0.1234567890123456

cout 設置浮點數輸出精度方法

方法一(全局設置 cout 輸出精度)

#include <iostream>
double tmp = 0.1234567890123456;
cout.precision(16);    //此處設置后,全局有效;cout浮點數輸出精度均為16
cout << tmp << endl;

方法二(全局設置 cout 輸出精度)

#include <iostream>
#include <iomanip>
double tmp = 0.1234567890123456;
cout << setprecision(16) << tmp << endl; //此處設置后,全局有效;后面cout浮點數輸出精度均為16
cout << 0.1234567890123456 << endl;    // 0.1234567890123456

讀到這里,這篇“C++ float轉std::string小數位數控制問題怎么解決”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

朔州市| 和林格尔县| 泾阳县| 开远市| 太白县| 大庆市| 陇川县| 河西区| 平遥县| 临沂市| 石棉县| 余庆县| 乐至县| 汝城县| 肥西县| 克东县| 临潭县| 精河县| 香格里拉县| 丹寨县| 锦州市| 新沂市| 玉溪市| 阜阳市| 石泉县| 玉环县| 改则县| 湘西| 灌云县| 民勤县| 东阳市| 乐都县| 盖州市| 海阳市| 夹江县| 伊吾县| 无锡市| 平阳县| 松溪县| 长岛县| 旌德县|