溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何解決C++數(shù)據(jù)精度問(wèn)題

發(fā)布時(shí)間:2021-08-05 11:02:18 來(lái)源:億速云 閱讀:1061 作者:小新 欄目:編程語(yǔ)言

小編給大家分享一下如何解決C++數(shù)據(jù)精度問(wèn)題,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

 1、背景

       對(duì)浮點(diǎn)數(shù)保存指定位小數(shù)。比如,  1.123456.   要保存1位小數(shù),,調(diào)用方法后, 保存的結(jié)果為: 1.1。 再比如,1.98765,  保存2位小數(shù)的結(jié)果為: 2.00.

2、 解決方案

      A、添加頭文件

#include <sstream> 
#include <iomanip>

      B、添加命名空間

using namespace std;

       C、添加函數(shù)

/************************************************************************/ 
/* 函數(shù)名:round 
/* 函數(shù)功能:數(shù)據(jù)精度計(jì)算函數(shù) 
/* 函數(shù)參數(shù):float src:待求精度數(shù)   int bits:精度(0表示保留小數(shù)點(diǎn)后0位小數(shù),1表示保留1位小數(shù),2:表示保留2位小數(shù)) 
/* 函數(shù)返回值:精度求取結(jié)果 
/* Author: Lee 
/************************************************************************/ 
float round(float src, int bits);

        函數(shù)實(shí)現(xiàn)

float CDemo1Dlg::round(float src, int bits) 
{ 
  stringstream ss; 
  ss << fixed << setprecision(bits) << f; 
  ss >> f; 
   return f; 
 
}

     D、調(diào)用方式

CString str2 = L"99.054"; 
float f2 = (float)_wtof(str2); 
f2 *= 10; 
f2 = this->round(f2, 2);

    E 、注意

        比如, 1.05,   double在計(jì)算機(jī)中表示為 1.0499999997, float表示為1.0500000003, 但其實(shí)際都是與1.05相等的。
       round方方式對(duì)處理的位數(shù)為5的情況有例外,比如: 1.05, 處理的結(jié)果 可能為1.0499999997。 這里寫(xiě)的是float, 你可以換做其他的類(lèi)型。自己多測(cè)幾次就明白了

以上是“如何解決C++數(shù)據(jù)精度問(wèn)題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI