chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

怎么修改顯示時的計數(shù)系統(tǒng)?怎么設置浮點數(shù)的顯示精度?

冬至子 ? 來源:iDoitnow ? 作者:艱默 ? 2023-07-18 15:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1. 修改顯示時的計數(shù)系統(tǒng)

ostream類是從ios類派生而來,ios類是從ios_base類派生而來。ios_base類存儲了描述格式狀態(tài)的信息,例如一個類成員中某些位決定使用哪個計數(shù)系統(tǒng)(如八/十/十六進制),另外一個成員決定字段的寬度,且ios_baseostream間接基類,因此ostream也可以修改計數(shù)系統(tǒng)和字段寬度。

對于設置顯示整數(shù)的計數(shù)系統(tǒng)整數(shù),我們使用dec、hexoct控制符來控制整數(shù)是以十進制、十六進制還是八進制顯示。例如:

int n = 13;
hex(cout);  //控制符實際上是函數(shù)但不是成員函數(shù),因此不必通過對象來調用,也可以使用cout < < hex;
cout < < n;  //輸出d
cout < < hex;//等同hex(cout)
cout < < n;  //輸出d
cout < < oct;//等同oct(cout),將輸出顯示設置為八進制
cout < < n;  // 輸出15
cout < < dec < < n;//輸出13

2. 調整字段寬度

ostream使用width()成員函數(shù)將長度不同的數(shù)字放到寬度相同的字段中,該方法的原型如下:

int width(); //該方法返回字段寬度的當前設置
int width(int i); //該方法將字段寬度設置為i個空格,并返回以前的字段寬度值。這樣使得能夠保存以前的值,以便以后恢復寬度值使用

width()方法只影響將顯示的下一個項目,然后字段的寬度將恢復為默認值。例如:

cout < < "字段默認寬度:" < < cout.width() < < endl;
cout < < "12345" < < endl;//顯示12345,方便查看后面每個對象顯示的時候占用的寬度
cout.width(3);//將字段寬度設置為3
cout < < 'a' < < 'b' < < 'c' < < endl;
cout.width(2);
cout < < "aaa";//測試當字節(jié)寬度設置過小,是否影響顯示,該語句執(zhí)行后字符寬度將恢復為默認值0
auto i = cout.width(3);//i=0
auto j = cout.width(4);//由于上一個語句已經(jīng)將寬度設置為3,因此j=3
auto k = cout.width(1);//k=4
cout < < endl;
cout < < "i = " < < i < < endl;
cout < < "j = " < < j < < endl;
cout < < "k = " < < k < < endl;

其對應的輸出為

字段默認寬度:0
12345
  abc
aaa
i = 0
j = 3
k = 4

從上面的例子可以看出,將字段寬度設置為3后,字符a顯示字符寬度為3,其余位置填充空格,且默認為右對齊。將字段寬度設置為2后,顯示字符串"aaa",從結果我們可以看到,字符串正常顯示,由此可以看出,cout不會截短數(shù)據(jù)。當顯示完字符串aaa后,我們將字符寬度設置為3,記錄上一項目的字符寬度為i,從打印結果來看,當顯示完字符串aaa后,寬度自動恢復為默認值0,因此i輸出結果為0。

3. 填充字符

默認情況下,cout使用空格填充字段中未被使用的部分,我們在1.2中的例子已經(jīng)驗證過了,那填充字符可以設置嗎?答案是肯定的,使用其成員函數(shù)fill()來改變填充字符,例如:

cout.fill('-');
cout < < "12345" < < endl;
cout.width(2);
cout < < 'a' < < 'b' < < endl;
cout.width(4);
cout < < 'a' < < 'b' < < endl;

輸出結果:

12345
-ab
---ab

由輸出結果可知,填充字符的設置與字符寬度設置不同的是,新填充的字符將一直有效,直到它更改為止。

4. 設置浮點數(shù)的顯示精度

C++的默認精度為6位(末尾的0不顯示)。coutprecision()成員函數(shù)可以設置顯示精度,例如:

float a = 3.1415;
float b = 0.123456789;
cout < < "a = " < < a < < endl;
cout < < "b = " < < b < < endl;
cout.precision(2);
cout < < "a = " < < a < < endl;
cout < < "b = " < < b < < endl;

輸出結果:

a = 3.1415
b = 0.123457
a = 3.1
b = 0.12

從輸出結果可以看出,precision()也是設置一次,一直有效,直到重新設置為止。

5. setf()

C++使用setf()成員函數(shù)控制小數(shù)點被顯示時其他幾個格式選項,其中cout.setf(std::ios_base::showpoint)設置cout打印浮點類型中末尾的0和小數(shù)點。例如:

float a = 13.1415;
float b = 0.123456789;
cout.setf(std::ios_base::showpoint);
cout < < "a = " < < a < < endl;
cout < < "b = " < < b < < endl;
cout.precision(2);
cout < < "a = " < < a < < endl;
cout < < "b = " < < b < < endl;

輸出結果:

a = 13.1415
b = 0.123457
a = 13.
b = 0.12

從輸出結果可以看出,setf()也是設置一次,一直有效,直到重新設置為止。

setf()有兩個原型,第一個為:

fmtflags setf(fmtflags); //fmtflags是bitmask類型(一種用來存儲各個位值的類型)的typedef名,用于存儲格式的標記

該版本的setf()用來設置單個位控制的格式信息。參數(shù)是一個fmtflags值,指出要設置哪一位。返回值的類型為fmtflags的數(shù)字,指出所有標記以前的設置。例如要將第11位設置為1,則需要傳遞一個第11位為1的數(shù)字,返回值為原來第11位的值。ios_base類定義了代表位值的常量,下表為其中一部分常用的定義:

1.jpg

注: 注意,僅當基數(shù)為10時才使用加號。C++將十六進制和八進制都視為無符號的,因此對它們,無需使用符號(然而,有些C++實現(xiàn)可能仍然會顯示加號)?!?/p>

例子:

using std::cout;
using std::endl;
using std::ios_base;
int size = 40;
int a = 63;

cout.width(size);
cout < < "cout default: a =  " < < a < < endl;

cout.width(size);
cout.setf(ios_base::showpos);  //顯示+
cout < < "cout.setf(ios_base::showpos): a =  " < < a < < endl;

cout.width(size);
std::hex(cout);  //使用hex
cout < < "std::hex(cout): a =  " < < a < < endl;

cout.width(size);
cout.setf(ios_base::uppercase);  // 使用大寫字母
cout < < "cout.setf(ios_base::uppercase): a =  " < < a < < endl;

cout.width(size);
cout.setf(ios_base::showbase);  // 使用0X前綴
cout < < "cout.setf(ios_base::showbase): a =  " < < a < < endl;

cout.width(size);
cout < < "cout default: true =  " < < true < < endl;

cout.width(size);
cout.setf(ios_base::boolalpha);
cout < < "cout.setf(ios_base::boolalpha): true =  " < < true < < endl;

輸出結果:

cout default: a =  63
     cout.setf(ios_base::showpos): a =  +63
                   std::hex(cout): a =  3f
   cout.setf(ios_base::uppercase): a =  3F
    cout.setf(ios_base::showbase): a =  0X3F
                  cout default: true =  0X1
cout.setf(ios_base::boolalpha): true =  true

第二個setf()原型接受兩個參數(shù),并返回以前的設置:

fmtflags setf(fmtflags, fmtflags);

第一參數(shù)和以前一樣,也是一個包含了所需設置的fmtflags值。第二參數(shù)指出要清除第一個參數(shù)中的哪些位。例如,將第3位設置為1表示以10為基數(shù),將第4位設置為1表示以8為基數(shù),將第5位設置為1表示以16為基數(shù)。假設輸出是以10為基數(shù)的,而要將它設置為以16為基數(shù),則不僅需要將第5位設置為1,還需要將第3位設置為0——這叫作清除位(clearing the bit)。使用函數(shù)setf( )時,要做的工作多些,因為要用第二參數(shù)指出要清除哪些位,用第一參數(shù)指出要設置哪位。ios_base類為此定義了常量(如下表所示)。

1.jpg

具體地說,要修改基數(shù),可以將常量ios_base::basefield用作第二參數(shù),將ios_base::hex用作第一參數(shù)。也就是說,下面的函數(shù)調用與使用十六進制控制符的作用相同:

cout.setf(ios_base::hex, ios_base::basefield); //與hex(cout);作用相同

其具體使用方法,如下例所示:

cout.setf(ios_base::left, ios_base::adjustfield);//左對齊
cout.setf(ios_base::showpos);//在正數(shù)前面加上+
cout.setf(ios_base::showpoint);//顯示小數(shù)點和末尾的0
cout.precision(3);
//使用科學計數(shù)法顯示,并保存默認的計數(shù)法
ios_base::fmtflags old =
    cout.setf(ios_base::scientific, ios_base::floatfield);
cout < < "Left Justification:n";
long n;
for (n = 1; n <= 41; n += 10) {
    cout.width(4);
    cout < < n < < "|";
    cout.width(12);
    cout < < sqrt(double(n)) < < "|n";
}

cout.setf(ios_base::internal, ios_base::adjustfield);//居中對齊
//恢復默認計數(shù)法
cout.setf(old, ios_base::floatfield);
cout < < "Internal Justification:n";
for (n = 1; n <= 41; n += 10) {
    cout.width(4);
    cout < < n < < "|";
    cout.width(12);
    cout < < sqrt(double(n)) < < "|n";
}

cout.setf(ios_base::right, ios_base::adjustfield);//右對齊
cout.setf(ios_base::fixed, ios_base::floatfield);//使用定點計數(shù)法
cout < < "Right Justification:n";
for (n = 1; n <= 41; n += 10) {
    cout.width(4);
    cout < < n < < "|";
    cout.width(12);
    cout < < sqrt(double(n)) < < "|n";
}

輸出結果:

Left Justification:
+1  |+1.000e+00  |
+11 |+3.317e+00  |
+21 |+4.583e+00  |
+31 |+5.568e+00  |
+41 |+6.403e+00  |
Internal Justification:
+  1|+       1.00|
+ 11|+       3.32|
+ 21|+       4.58|
+ 31|+       5.57|
+ 41|+       6.40|
Right Justification:
  +1|      +1.000|
 +11|      +3.317|
 +21|      +4.583|
 +31|      +5.568|
 +41|      +6.403|

注: 對于setf()的效果可以通過unsetf()消除,其原型為void unsetf(fmtflags mask);。其中,mask是位模式。mask中所有的位都設置為1,將使得對應的位被復位。也就是說,setf()將位設置為1,unsetf()將位恢復為0?!?/p>

6. 標準控制符

對于用戶來說,使用setf()進行格式化并不是最友好的方法。為此C++提供了多個控制符來完成相應的格式化效果,其能夠調用setf(),并自動提供正確的參數(shù)。例如我們前面介紹過的dec、hexoct。C++常用控制符如下表所示:

1.jpg

7. 頭文件iomanip

使用iostream工具來設置一些格式值(如字段寬度)非常麻煩。為了簡化工作,C++在頭文件中提供了其他的一些控制符,不但可以提供前面提到過的格式設置,而且用起來方便。其中常用的控制符如下:

setprecision()//設置精度,其接受一個指定精度的整數(shù)參數(shù)
 setfill()     //填充字符,其接受一個指定填充字符的char參數(shù)
 setw()        //設置字段寬度,其接受一個指定字段寬度的整數(shù)參數(shù)。

由于它們都是控制符,因此可以用cout語句連接起來。這樣,setw()控制符在顯示多列值時尤其方便。其使用方法如下例所示:

#include < cmath >
#include < iomanip >
#include < iostream >
int main() {
    using namespace std;
    // use new standard manipulators
    cout < < fixed < < right;
    // use iomanip manipulators
    cout < < setw(6) < < "N" < < setw(14) < < "square root" < < setw(15)
        < < "fourth rootn";
    double root;
    for (int n = 10; n <= 100; n += 10) {
        root = sqrt(double(n));
        cout < < setw(6) < < setfill('.') < < n < < setfill(' ') < < setw(12)
            < < setprecision(3) < < root < < setw(14) < < setprecision(4) < < sqrt(root)
            < < endl;
    }
    return 0;
}

輸出結果:

N   square root   fourth root
....10       3.162        1.7783
....20       4.472        2.1147
....30       5.477        2.3403
....40       6.325        2.5149
....50       7.071        2.6591
....60       7.746        2.7832
....70       8.367        2.8925
....80       8.944        2.9907
....90       9.487        3.0801
...100      10.000        3.1623

注: 最后一行10.000,是使用fixed控制符導致顯示末尾的0?!?/p>

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    114

    文章

    17715

    瀏覽量

    191368
  • 存儲器
    +關注

    關注

    39

    文章

    7724

    瀏覽量

    171258
  • 計數(shù)器
    +關注

    關注

    32

    文章

    2307

    瀏覽量

    97825
  • C++語言
    +關注

    關注

    0

    文章

    147

    瀏覽量

    7641
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    浮點數(shù)顯示問題

    如何將一個浮點數(shù)例如12.4顯示在lcd12864上面
    發(fā)表于 09-20 08:17

    STM32CubeIDE是否需要配置任何設置才能正確顯示浮點數(shù)

    我正在用浮點數(shù)調試代碼。我正在使用實時表達式來觀察值,但即使我選擇了小數(shù)格式,我也沒有得到浮點值的小數(shù)位。我似乎記得在另一個項目中這樣做并獲得小數(shù)位。是否需要配置任何設置才能正確顯示
    發(fā)表于 12-19 08:21

    浮點數(shù)在單片機數(shù)據(jù)采集監(jiān)控系統(tǒng)中的應用

    單片機能夠直接處理的數(shù)是定點數(shù),然而實際上需要輸入、處理和顯示的數(shù)據(jù)卻是浮點數(shù),本文詳細介紹了浮點數(shù)在單片機系統(tǒng)中的實現(xiàn)。關鍵詞:
    發(fā)表于 08-13 15:38 ?44次下載

    浮點數(shù)的表示方法

    浮點數(shù)的表示方法  浮點數(shù),是指小數(shù)點在數(shù)據(jù)中的位置可以左右移動的數(shù)據(jù)。它通常被表示成:    N = M* RE  這里的M(Mantissa)被稱為浮點數(shù)
    發(fā)表于 10-13 17:13 ?1.7w次閱讀
    <b class='flag-5'>浮點數(shù)</b>的表示方法

    浮點數(shù)常用的編碼方法

    浮點數(shù)常用的編碼方法  前面已經(jīng)說到,在計算機內,浮點數(shù)被表示為如下格式:    通常情況
    發(fā)表于 10-13 17:21 ?4942次閱讀
    <b class='flag-5'>浮點數(shù)</b>常用的編碼方法

    STM32如何通過 printf 打印出浮點數(shù)

    這是由于 IAR 默認選擇的 printf 庫不支持浮點數(shù)的的輸出。可在設置選項中修改。如下:默認使用 small,改為 auto 即可。
    發(fā)表于 05-07 16:47 ?2w次閱讀

    Xilinx怎么定點數(shù)浮點數(shù)

    轉化為的浮點數(shù)可以是單精度也可以是雙精度。
    發(fā)表于 07-05 08:09 ?4253次閱讀
    Xilinx怎么定<b class='flag-5'>點數(shù)</b>轉<b class='flag-5'>浮點數(shù)</b>

    單片機顯示浮點數(shù)

    ;stdarg.h"void OLED_ShowFNum(u8 x,u8 y,char *str,...) //顯示浮點數(shù){ char buf[10]; va_list ptr; //用于獲取不確定個數(shù)的參數(shù) ...
    發(fā)表于 11-13 14:06 ?24次下載
    單片機<b class='flag-5'>顯示</b><b class='flag-5'>浮點數(shù)</b>

    談一談浮點數(shù)精度問題

    還是要從浮點數(shù)的存儲和標識出發(fā)來處理該問題,既然浮點數(shù)天然就存在一定的誤差,而有時候計算又無法獲得唯一的數(shù)值,如下圖所示,浮點數(shù)計算出來的實軸上的值都會因為浮點數(shù)無法存儲標識而近似到其
    的頭像 發(fā)表于 08-11 14:28 ?5973次閱讀
    談一談<b class='flag-5'>浮點數(shù)</b>的<b class='flag-5'>精度</b>問題

    什么是浮點數(shù)浮點數(shù)在內存中的存儲

    浮點型簡單講就是實數(shù)的意思。浮點數(shù)在計算機中用以近似表示任意某個實數(shù)。
    的頭像 發(fā)表于 11-09 11:07 ?7213次閱讀
    什么是<b class='flag-5'>浮點數(shù)</b>?<b class='flag-5'>浮點數(shù)</b>在內存中的存儲

    什么是浮點數(shù)

    Python數(shù)據(jù)類型第一種:字符串(str)。 Python數(shù)據(jù)類型第二種:整數(shù)(int)。 Python數(shù)據(jù)類型第三種:浮點數(shù)浮點數(shù)的英文名是float,浮點數(shù)沒有簡寫。
    的頭像 發(fā)表于 02-23 14:58 ?6034次閱讀

    精度和雙精度浮點數(shù)的區(qū)別

    在計算機科學和數(shù)值計算中,浮點數(shù)是一種用于表示實數(shù)的數(shù)據(jù)類型。浮點數(shù)有兩種精度級別:單精度和雙精度。這兩種
    的頭像 發(fā)表于 12-13 10:55 ?1.4w次閱讀

    精度和雙精度浮點數(shù)的區(qū)別

    精度和雙精度是計算機中表示浮點數(shù)的兩種不同的精度。在計算機中,浮點數(shù)用來表示帶有小數(shù)部分的實數(shù),而單
    的頭像 發(fā)表于 12-15 10:25 ?7222次閱讀

    modbus浮點數(shù)怎么讀取

    Modbus是一種通信協(xié)議,常用于工業(yè)自動化系統(tǒng)中的設備之間的通信。它支持多種數(shù)據(jù)類型,包括整數(shù)、浮點數(shù)、字符串等。浮點數(shù)在工業(yè)領域中廣泛應用,因此了解如何讀取和處理Modbus浮點數(shù)
    的頭像 發(fā)表于 12-28 14:38 ?9517次閱讀

    大彩講堂:VisualHMI-LUA教程-獲取設置精度浮點數(shù)函數(shù)的應用

    軟件開發(fā)中各種協(xié)議對浮點數(shù)數(shù)據(jù)進行獲取和賦值處理。get_float(vtype,addr)讀取單精度浮點數(shù)(float)寄存器,返回有符號單精度
    的頭像 發(fā)表于 10-16 00:00 ?1387次閱讀
    大彩講堂:VisualHMI-LUA教程-獲取<b class='flag-5'>設置</b>單<b class='flag-5'>精度</b><b class='flag-5'>浮點數(shù)</b>函數(shù)的應用