float to string nachbauen



  • Hi,

    ich habe einen kleinen task gecoded:
    ich weiss das 7.64 nicht als floating point representiert werden kann...aber warum bekomme ich 7.995886933 als ergebnis?

    /*Question:
    Given a float number 7.64, convert it into the string WITHOUT using any inbuilt function/library.
    for eg:
    input
    float no.: 7.64
    output
    string: 7.64
    */

    template <class T>
    string to_string(T &t)
    {
    stringstream ss;
    ss << t;
    return ss.str();
    }

    string float_to_string(float val) {
    int integral = static_cast<int>(val);
    int fractional = 0;

    val = val - integral;
    while(val > 0) {
    val = val * 10;
    fractional = (fractional * 10) + static_cast<int>(val);
    val = val - static_cast<int>(val);
    }

    string str = to_string<int>(integral) + '.' + to_string<int>(fractional);

    return str;
    }

    int main() {
    cout << float_to_string(7.64) << endl;
    }


  • Mod

    Dein Code formatiert und in Tags...

    #include <iostream>
    #include <string>
    #include <sstream>
    
    using namespace std;
    
    template <class T>
    string to_string(T &t)
    {
    	stringstream ss;
    	ss << t;
    	return ss.str();
    }
    
    string float_to_string(float val)
    {
    	int integral = static_cast<int>(val);
    	int fractional = 0;
    
    	val -= integral;
    	while(val > 0)
    	{
    		val *= 10;
    		fractional = (fractional * 10) + static_cast<int>(val);
    		val -= static_cast<int>(val);
    	}
    
    	string str = to_string<int>(integral) + '.' + to_string<int>(fractional);
    
    	return str;
    }
    
    int main()
    {
    	cout << float_to_string(7.64) << endl;
    }
    

  • Mod

    aber warum bekomme ich 7.995886933 als ergebnis?

    Weil Fließkommazahlen anders funktionieren als du denkst. Die Standardausgabe gibt Fließkommazahlen immer nur bis zu einer bestimmten vorgegebenen Präzision aus - es ist nämlich völlig Unsinnig, alle Ziffern der gespeicherten Fließkommazahl auszugeben.

    Versuche also, deine to_string Funktion nur zwei Nachkommastellen ausgeben zu lassen. Oder die Schleife nur maximal fünf Durchlaufe zu lassen. Da bekomme ich schon 7.6399 .



  • soll der user die anzahl der nachkomma-stellen angeben?



  • also:

    #include <iostream> 
    #include <string> 
    #include <sstream> 
    
    using namespace std; 
    
    template <class T> 
    string to_string(T &t) 
    { 
        stringstream ss; 
        ss << t; 
        return ss.str(); 
    } 
    
    string float_to_string(float val, int n) 
    { 
        int integral = static_cast<int>(val); 
        int fractional = 0; 
    
        val -= integral; 
        while(val > 0 && n > 0) 
        { 
            val *= 10; 
            fractional = (fractional * 10) + static_cast<int>(val); 
            val -= static_cast<int>(val); 
            n--;
        } 
    
        string str = to_string<int>(integral) + '.' + to_string<int>(fractional); 
    
        return str; 
    } 
    
    int main() 
    { 
        cout << float_to_string(7.64, 4) << endl; 
    }
    

Log in to reply