寫乙個二進位制數轉十進位制數的小程式

2021-10-09 18:28:44 字數 1521 閱讀 9447

本來想用浮點數作為引數的,但是浮點數精度丟失造成的誤差使得程式不能正常執行(比如輸入引數值為1010.111時,對此值取整再用原值減整數值,1010.111-1010得到的小數部分結果賦給double型變數,變數的值變為0.1109999…),所以改用字串作為引數。由於輸出結果仍為浮點數,當轉換結果的小數字數超過我格式控制的8位時,仍然會出現精度丟失的問題。

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

class

correct};

void

mybcd

(string &value)

//當有非二進位制數或小數點大於1個時退出函式

if(it != value_v.

end(

)|| mycount >1)

//到此處證明沒有非二進位制數

int int_sum =0;

double float_sum =

0.0;

string s_int;

string s_float;

//查詢是否有小數點,有則返回小數點位置,否則返回-1

int pos = value.

find

(".");

int int_pos = pos;

//若小數點在第一位,則不符合數字原則

if(int_pos ==0)

else

if(int_pos ==-1

)//取整數部分,區間為[0, int_pos)

s_int = value.

substr(0

, int_pos)

;//獲取整數部分的長度

int int_len = s_int.

size()

;//計算整數部分

//從右往左取數計算

for(

int i =

0, j = int_len -

1; i < int_len; i++

, j--

)//當有小數時

if(pos !=-1

)}//計算完輸出結果,格式控制固定輸出8位小數

cout <<

setiosflags

(ios::fixed)

<<

setprecision(8

);cout <<

"result: "

; cout << value <<

"b = "

<<

(double

)int_sum + float_sum <<

"d"<< endl;

cout << endl;

}int

main()

return0;

}

二進位制轉十進位制

二進位制轉十進位制方法很多,如字元陣列,指標法等 下面用字串函式的方法實現 二進位制轉十進位制 主要用 到 string函式性質及pow求乙個數的n次方的函式過載 by adengou 2010.08.04 win7 dev c 5.0 vs 2010 通過 include include incl...

十進位制轉二進位制

includeint dg unsigned n,int c 注意 引數型別是unsigned int main 陣列全部初始化為0 printf d n sizeof int unsigned temp,u temp u 4294967295u int tu int u printf u u,tu...

十進位制轉二進位制

宣告 最後一種降冪法頗具魅力,而且與方法二有異曲同工之妙 十進位制轉二進位制的幾種方法 輸入 乙個無符號的十進位制整數 輸出 對應十進位制的二進位制顯示 例如 input 10,output 1010 方法一 除二取餘法 forinput 0 cout input 2 input 2 end 輸出順...