Announcement

Collapse
No announcement yet.

Funktion um Type einer Zahl als Sting ermitteln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Funktion um Type einer Zahl als Sting ermitteln

    Hallo,

    ich bin gerade auf der suche nach einer guten Möglichkeit den Type einer Zahl (als String) zu ermitteln. Ich meine damit. Ich habe z.B. die Zahl 10.2 als Sting und will dann den Type ermitteln. Genauso wie 10 (als String) vom Type int ist usw.
    Deswegen habe ich mir eine kleine Hilfsfunktion geschrieben...

    Code:
    string helper::getNumberType(string strNumber)
    {
        string strType = "";
    
        if(strNumber == "0")
        {
            strType = "int";
            return strType;
        }
        else
        {
            double fType = atof(strNumber.c_str());
            if(fType != 0)
            {
                strType = "double";
                return strType;
            }
            int iType = atoi(strNumber.c_str());
            if(iType != 0)
            {
                strType = "int";
                return strType;
            }
        }
    
        return strType;
    }
    Allerdings wird die Zahl 10.5 auch als als double erkannt und ich erhalte bei atof einen anderen Wert als 0. Also was mache ich falsch oder gibt es einen besseren Weg den Type der Zahlen zu erkennen?

    Gruß

    Rene

  • #2
    Es gibt in C/C++ keine Typerkennung. Du kannst höchstens ermitteln, ob die Zahl einen Nachkommaanteil hat oder nicht

    EDIT:

    http://www.cplusplus.com/reference/c...math/modf.html
    Christian

    Comment


    • #3
      danke für die Info. Ich habe das jetzt so implementiert und so scheint es auch zu funktionieren.

      Gruß

      Rene

      Code:
      string helper::getNumberType(string strNumber)
      {
          string strType = "";
      
          if(strNumber == "0")
          {
              strType = "int";
              return strType;
          }
          else
          {
              double intPart, fractPart;
      
              //Test auf double
              double fType = atof(strNumber.c_str());
              
              fractPart = modf(fType, &intPart);
              if((fractPart != 0.0) && (fType != 0))
              {
                  strType = "double";
                  return strType;
              }
              
              //Test auf int
              int iType = atoi(strNumber.c_str());
              if((iType != 0) && (iType < 32767 && iType > -32767))
              {
                  strType = "int";
                  return strType;
              }
      
              //Test auf long
              int lType = atol(strNumber.c_str());
              if(lType != 0)
              {
                  strType = "long";
                  return strType;
              }
          }
      
          return strType;
      }

      Comment


      • #4
        Wird wohl nicht so laufen

        Grundsätzlich ist die Größe eines int abhängig in welchem BS du arbeitest 8-Bit, 16-Bit 32-Bit, 64-Bit.

        Davon ausgehend, dass du auch ein 32-bit System hast, ist ein int

        -2.147.483.648 <= X <= 2.147.483.647

        groß. Ein unsigned int

        0 <= X <= 4.294.967.295


        Des Weiteren kann dein erkannter double auch ein float sein.

        Wie gesagt, es gibt keine Typerkennung und diese wird auch so eigentlich nicht benötigt.

        Auch vestehe ich deine Programmierung nicht

        strType = "long";
        return strType;

        warum nicht gleich

        return "long";

        ????
        Zuletzt editiert von Christian Marquardt; 29.03.2008, 19:58. Reason: Rechtschreibung
        Christian

        Comment

        Working...
        X