1
#include <iostream>
#include <stdio.h>
#include <string>
#include <iomanip>
#include <cmath>

using namespace std;
void toBase (int n, int base)
{
    string x = "0123456789ABCDEF";
    if (n > 0)
    {
      toBase(n / base, base);
        cout << x[n % base];
    }
}

int main()
{

    float num;
    int a;
    cout << "";
    cin >> num;
    cout << "";
    cin >> a;
    toBase(num, a);
    cout << ".";
    float fNum = 12.34;
    int iPart = (int)fNum;
    float fPart = fNum - (float)iPart;
    toBase(fNum, a);
    cout << endl;


    }

以前にも同様の質問を投稿しましたが、ここにもう一度。小数を機能させることができません。2 倍してみましたがうまくいきませんでした。とにかく、10 進数 (小数を含む) を他の基数 (2 から 16) に変換するコードを作成することになっています。これまでのところ、10 のテスト結果のうち 2 つだけが正しいです。

10.5 - 1010.1 - 1010.1100   
2      
3.827 - 10.2110222122 - 10.110   
3     
82.7593 - 101.6744681322 - 101.13    
9     
7218.8192 - 5472.90139A8535 - 5472.11    
11     
8273.8 - 26B8.C - 26B8.C    
15     
23517.75 - 5BDD.C - 5BDD.C
16    
92.33271 - 1011100.0101010100 - 1011100.1100
2     
4095.839 - 7777.6554426416 - 7777.14    
8     
29672.9311 - 13033220.3232113021 - 13033220.30    
4     
9999.987 - 270F.FCAC083126 - 270F.C    
16

ご覧のとおり、ドットの前の数字は常に正しいですが、小数 (2 つのケースを除く) は常に間違っています。(10.5 と 2 は 10 進数と基数です。2 番目の数値は取得する必要があるもので、3 番目の数値は取得するものです)。

4

2 に答える 2

1

fNum剰余を取得する代わりに固定数を使用しています。いずれの場合も、小数部分は と同等であることに注意してください12

通常、10 進数は 2 進浮動小数点では正確に表現できないため、関心のある 10 進数の桁数を決定し、丸めを行う必要があります。

于 2013-04-30T16:28:38.393 に答える