Berechnen Sie die Anzahl der Dezimalstellen für float-Wert OHNE Bibliotheken?

Brauche ich, um berechnen Sie die Anzahl der Dezimalstellen für float-Wert, z.B.

1234.567 -> 3

2.1233 -> 4

4.2432 -> 4

Meine erste Idee war:

number = 1234.567;  
...  
while (number - (int)number > 0.0)  
{  
  //Count decimal places  
  ...  
  number *= 10;  
}

Dies verursacht jedoch Probleme mit der float-Präzision in der while-Bedingung. Die einzig sichere Abhilfe wäre eine Konvertierung von float zu string und führen Sie dann string-basierte Zählung von Dezimalstellen.

Das problem ist: ich muss KEINE Bibliotheken, weder Dritten noch der C++ - standard-Bibliotheken (aufgrund von Umwelt-Einschränkungen). Ich weiß, wie zu bedienen, auf dem ein char* später, aber wie konvertiere ich meine float-Wert in einen string (also char*) ohne Verwendung von C++ - Bibliotheken?

Jede Hilfe wird sehr geschätzt.


//Edit: Das ist mein Aktueller Ansatz, die immer noch nicht funktioniert (z.B. für 2.55555). Wie kann ich wählen Sie einen geeigneten Schwellenwert?

float abs(float number)  
{  
  return (number > 0.0 ? number : number * -1);  
}  

int round(float number)  
{  
  return (int)(number + 0.5);  
}  

void splitFloat(float* number, int* mantissa, int* exponent)  
{  
  while (abs(*number - round(*number)) > 0.00001)  
  {  
    //*number -= (int)*number; //???  
    *number *= 10.0;  

    *mantissa = *number;  
    *exponent += 1;  

    cout << "Number: " << *number << ", Mantisse: " << *mantissa << ", Exponent: " << *exponent << endl;  
  }  
}
  • Was Sie versuchen zu tun, nicht wirklich Sinn macht. Was auch immer Ihre äußere problem ist, dies ist wahrscheinlich nicht sinnvoll, es zu lösen.
  • möglich, Duplikat der Wie konvertieren von Zeichenfolgen schwimmt mit perfekter Genauigkeit?
  • Wenn Sie nicht mit den C++ - standard-Bibliothek, dann bist du ziemlich viel zu schreiben C, ignorieren viele nützliche Funktionen.
  • link ist für die Frage der Verwendung D aber die Antworten sind nicht contrained zu, dass languge.
  • ist der Grund, warum ich denke, dies ist eine legitime dupe.
  • ist das nicht eine Frage, gehen die entgegengesetzte Richtung? Dies ist float zu string, nicht string zu float.
  • Ein bisschen hintergrund wäre schön. Ist dies eine Hausaufgaben-Frage? Versuchen Sie, tun Sie etwas bestimmtes? es ist absolut obligatorisch, dass Sie einen Schwimmer oder verwenden Sie den Schwimmer, weil das ist, was Sie erwarten, zu verwenden? Dies scheint übermäßig kompliziert, und ich vermute, es muss einen besseren Weg, das zu tun, was Sie wollen ...
  • Wohnen: die Verwendung von float ist obligatorisch. Ziel ist die Normalisierung der float-Wert und dann bekommen es die Mantisse und den Exponenten als integer-Werte. Einschränkung ist, dass keine Bibliotheken verwendet werden müssen, aufgrund der ökologischen Grenzen.

InformationsquelleAutor | 2012-03-23
Schreibe einen Kommentar