本來想用浮點數作為引數的,但是浮點數精度丟失造成的誤差使得程式不能正常執行(比如輸入引數值為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 輸出順...