In diesem Beitrag wird ein vektorisierter Ansatz aufgeführt, der alle möglichen Kombinationen von Ziffern durchläuft, um den besten für die endgültige Ausgabe als Zeichenfolge auszuwählen. Bitte beachten Sie, dass es wegen seiner Art, alle möglichen Kombinationen zu erstellen, speicherintensiv und langsamer als ein rekursiver Ansatz wäre, aber ich schätze, es könnte nur zu Spaß oder zu pädagogischen Zwecken verwendet werden!
Hier ist die Funktion Implementierung -
function s = dec2base_float(d,b,nde)
%DEC2BASE_FLOAT Convert floating point numbers to base B string.
% DEC2BASE_FLOAT(D,B) returns the representation of D as a string in
% base B. D must be a floating point array between 0 and 1.
%
% DEC2BASE_FLOAT(D,B,N) produces a representation with at least N decimal digits.
%
% Examples
% dec2base_float(2/5,4,4) returns '0.1212'
% dec2base_float(2/5,3,6) returns '0.101211'
%// Get "base power-ed scaled" digits
scale = b.^(-1:-1:-nde);
%// Calculate all possible combinations
P = dec2base(0:b^nde-1,b,nde)-'0';
%// Get the best possible combination ID. Index into P with it and thus get
%// based converted number with it
[~,idx] = min(abs(P*scale(:) - d));
s = ['0.',num2str(P(idx,:),'%0.f')];
return;
Beispielläufe -
>> dec2base_float(2/5,4,4)
ans =
0.1212
>> dec2base_float(2/5,4,6)
ans =
0.121212
>> dec2base_float(2/5,3,6)
ans =
0.101211
Verwandte Problem von MATLAB: https://www.mathworks.com/matlabcentral/cody/problems/42758-convert- Float-zu-Base-n. Die Tatsache, dass es existiert, bedeutet, dass es keine MATLAB-Funktion gibt, um dies zu tun, müssen Sie es selbst codieren –
Ich kenne keine eingebauten Funktionen, um Basis-Konvertierungen auf Nicht-Ganzzahlen zu machen. Du könntest es immer manuell machen. – beaker
Ich dachte über diesen Weg (unvollständig): Wenn a ist die Zahl und es ist zwischen 0 und 1, dann b = Stock (a * 4); r = abs (a * 4-b) = c; d = Boden (c * 4); r = abs (4 * c-d); .... sollte alle Ziffern nach dem Komma geben (denke ich). – user3285148