最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ float轉(zhuǎn)std::string 小數(shù)位數(shù)控制問題

 更新時間:2022年11月08日 10:12:03   作者:Atticus_DY  
這篇文章主要介紹了C++ float轉(zhuǎn)std::string 小數(shù)位數(shù)控制問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

float轉(zhuǎn)std::string 小數(shù)位數(shù)控制

std::stringstream 方式

?? ?float a = 1122.334455;
?? ?std::stringstream buf;
?? ?buf.precision(2);//覆蓋默認(rèn)精度
?? ?buf.setf(std::ios::fixed);//保留小數(shù)位
?? ?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的,兩位小數(shù)
?? ?std::string strCode(chCode);
?? ?delete []chCode;

string轉(zhuǎn)float顯示位數(shù)有誤;cout 的 precision 成員函數(shù)

問題描述

在進(jìn)行string轉(zhuǎn)float過程中,發(fā)現(xiàn)有些數(shù)顯示位數(shù)不同(存在數(shù)精度少了一位的情況,例如:0.1285354 轉(zhuǎn)換后,顯示 0.128535)

數(shù)據(jù)如下:

0.0281864
-0.0635702
0.0457153
0.1285354
-0.0254498
...

問題分析

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

  • float有效數(shù)字位為6 – 7位,字節(jié)數(shù)為4,指數(shù)長度為8位,小數(shù)長度為23位。取值范圍為 3.4E-38~3.4E+38。
  • double有效數(shù)字位為15 – 16位,字節(jié)數(shù)為8,指數(shù)長度為11位,小數(shù)長度為52位。取值范圍為1.7E-308~1.7E+308。

隨即思考,是不是轉(zhuǎn)換后賦值到了float上,導(dǎo)致精度降低呢?

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

這才想到會不會使 cout 輸出精度的問題,搜索后發(fā)現(xiàn) cout 需要調(diào)用 precision() 成員函數(shù)來設(shè)置顯示精度,而 cout 默認(rèn)精度為6位有效數(shù)字,哈哈真是湊巧,跟 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 設(shè)置浮點數(shù)輸出精度方法

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

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

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

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

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解C/C++中const限定符總結(jié)

    詳解C/C++中const限定符總結(jié)

    const是一種限定符,被const所限定的變量其值不可以被改變。。這篇文章主要介紹了C/C++中const限定符總結(jié),通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 使用C語言打印月歷

    使用C語言打印月歷

    這篇文章主要為大家詳細(xì)介紹了使用C語言打印月歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 利用C語言玩轉(zhuǎn)魔方陣實例教程

    利用C語言玩轉(zhuǎn)魔方陣實例教程

    這篇文章主要給大家介紹了關(guān)于利用C語言玩轉(zhuǎn)魔方陣的相關(guān)資料,文中詳細(xì)介紹了關(guān)于奇數(shù)魔方陣和4N 魔方陣的實現(xiàn)方法,通過示例代碼讓大家更好的參考學(xué)習(xí),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • C語言實現(xiàn)掃雷小游戲的全過程記錄

    C語言實現(xiàn)掃雷小游戲的全過程記錄

    這篇文章主要給大家介紹了關(guān)于C語言實現(xiàn)掃雷小游戲的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 淺談C語言編程中的布爾bool數(shù)據(jù)類型

    淺談C語言編程中的布爾bool數(shù)據(jù)類型

    這篇文章主要介紹了C語言編程中的布爾bool數(shù)據(jù)類型,bool并不是需要通過C++才能使用的,需要的朋友可以參考下
    2015-11-11
  • 在C++中把字符串轉(zhuǎn)換為整數(shù)的兩種簡單方法

    在C++中把字符串轉(zhuǎn)換為整數(shù)的兩種簡單方法

    經(jīng)常會遇到類型轉(zhuǎn)換,本文主要介紹了C++中把字符串轉(zhuǎn)換為整數(shù)的兩種簡單方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C++類與對象及構(gòu)造函數(shù)析構(gòu)函數(shù)基礎(chǔ)詳解

    C++類與對象及構(gòu)造函數(shù)析構(gòu)函數(shù)基礎(chǔ)詳解

    這篇文章主要為大家介紹了C++類與對象及構(gòu)造函數(shù)析構(gòu)函數(shù)基礎(chǔ)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 判斷一個無向圖是否為連通圖的方法

    判斷一個無向圖是否為連通圖的方法

    今天小編就為大家分享一篇關(guān)于判斷一個無向圖是否為連通圖的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • C++重載的奧義之運算符重載詳解

    C++重載的奧義之運算符重載詳解

    函數(shù)的重載是指利用相同的函數(shù)名設(shè)計一系列功能相近,但是功能細(xì)節(jié)不一樣的函數(shù)接口;因此運算符重載也是指對于同一個運算符來說,它可以用于實現(xiàn)不同的功能。下面就一起來理解下運算符重載的應(yīng)用吧
    2023-04-04
  • C++中overload,override,overwrite的區(qū)別詳細(xì)解析

    C++中overload,override,overwrite的區(qū)別詳細(xì)解析

    以下是對C++中overload,override,overwrite的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-09-09

最新評論

平顶山市| 枣阳市| 游戏| 安庆市| 甘泉县| 威海市| 新竹县| 沭阳县| 于田县| 电白县| 滨州市| 松江区| 泰顺县| 萨迦县| 屏南县| 和顺县| 洞口县| 卫辉市| 手游| 通道| 忻州市| 台山市| 南丰县| 南岸区| 林西县| 无极县| 修武县| 东至县| 新丰县| 华宁县| 博乐市| 洱源县| 淮安市| 尚义县| 二连浩特市| 桃江县| 平度市| 沁阳市| 广河县| 桑植县| 朝阳市|