十進制小數轉其他進制小數:
二進制
對十進制小數乘2得到的整數部分和小數部分,整數部分既是相應的二進制數碼,再用2乘小數部分(之前乘後得到新的小數部分),又得到整數和小數部分.
如此不斷重複,直到小數部分爲0或達到精度要求爲止.第一次所得到爲最高位,最後一次得到爲最低位
如:0.25的二進制
0.25*2=0.5 取整是0
0.5*2=1.0 取整是1
即0.25的二進制爲 0.01 ( 第一次所得到爲最高位,最後一次得到爲最低位)
0.8125的二進制
0.8125*2=1.625 取整是1
0.625*2=1.25 取整是1
0.25*2=0.5 取整是0
0.5*2=1.0 取整是1
即0.8125的二進制是0.1101(第一次所得到爲最高位,最後一次得到爲最低位)
八進制
十進制小數→→→→→八進制小數 方法:“乘8取整”
題目描述
有一個介於0和1之間的實數,類型爲double,返回它的二進制表示。如果該數字無法精確地用32位以內的二進制表示,返回“Error”。
給定一個double num,表示0到1的實數,請返回一個string,代表該數的二進制表示或者“Error”。
測試樣例:
0.625
返回:0.101
class BinDecimal {
public:
string printBin(double num) {
// write code here
string res = "0.";
int count = 0;
double now = num;
while (count < 32){
if(now == 0)
return res;
now *= 2;
char c;
if(now >= 1){
c = '1';
now -= 1;
}
else{
c = '0';
}
res += c;
count++;
}
return "Error";
}
};