float ===> char umwandeln...
-
ich muss unbedingt wissen wie man eine zahl in einzelne ziffern vom typ 'char' ,die man dann zum beispiel in einen array packt, umwandelt. ich hab da vielleicht an den modulo operator gedacht...
hat jemand einen algorythmus???thx im voraus!
-
AAAAACHTUNG: was willst du genau? Einen float-Wert in einen 1-byte-Datentyp quetschen oder eine Ziffer als Zeichen oder als String?
-
Du meinen so?
#include <iostream> #include <strstream> using namespace std; int main() { strstream my_str; for (int i=0; i<=9; i++) my_str << i; cout << my_str.rdbuf() <<endl; return 0; }
-
was ist eigentlich:
strstream und rdbuf???
ich wollte doch float -> char umwandeln wie geht da strstream?
AAAAACHTUNG: was willst du genau? Einen float-Wert in einen 1-byte-Datentyp quetschen oder eine Ziffer als Zeichen oder als String?
in der art:
float foo = 314
fooo<char>[0] = 3
fooo<char>[1] = 1
fooo<char>[2] = 4
-
ich wollte doch float -> char umwandeln wie geht da strstream?
in der art:
float foo = 314
1. wo ist den das wandeln???
2. ich dachte du willst float nutzen (z.B. 314**.**123456)also float zu int mit modular ist nicht möglich (wüßte jedenfalls nicht wie)
einen int zu einem char "wandeln" macht keinen sinn (z.B. zahl zu buchstabe; wo ist da der sinn?)hier hast du ein kleines beispiel um deine angebliche "float"-zahl als short in dein array bekommst:
#include <iostream> using namespace std; int main() { int zahlc[3]; short zahls = 314; unsigned int izahl = zahls%10; unsigned int iizahl = ((zahls - izahl)/10)%10; unsigned int iiizahl = ((((zahls - izahl)/10)-iizahl)/10); zahlc[2]=izahl; zahlc[1]=iizahl; zahlc[0]=iiizahl; cout << "ganz: " << zahls << endl; cout << "zahlc[0]: " << zahlc[0] << endl; cout << "zahlc[1]: " << zahlc[1] << endl; cout << "zahlc[2]: " << zahlc[2] << endl; cin.get(); }
hoffe mal es hilft dir weiter
-
natürlich könntest du auch eine echte float-zahl in einen string wandeln, diesen in einzelne "ziffern" zerlegen -> diese ziffern wieder in einen int wandeln und diese dann in dein array veteilen
; aber was machst du dann mit dem ','?? weglassen?? auch in ein array packen??
naja, wirst schon wissen was du willst
-
wie wärs mit
float zahl; char zahlalschar[150]; sprintf(zahlalschar, "%lf", zahl);
und schon hast du deine Zahl in einem char[]
-
insbesondere dass...
unsigned int izahl = zahls%10;
unsigned int iizahl = ((zahls - izahl)/10)%10;
unsigned int iiizahl = ((((zahls - izahl)/10)-iizahl)/10);ist brauchbar... funktioniert das mit kommas, die auch als einzelnes zeichen abgelegt werden...(denke nicht) muss ich wohl ausprobieren.
natürlich könntest du auch eine echte float-zahl in einen string wandeln, diesen in einzelne "ziffern" zerlegen -> diese ziffern wieder in einen int wandeln und diese dann in dein array veteilen
; aber was machst du dann mit dem ','?? weglassen?? auch in ein array packen??
frage...: 1.umwandeln mit static_cast?! oder nur bei int/char
2.wie zerlegt man am schnellsten strings in einzelne zeichen?
3.ist allgemein recht rechenintensiv, geht sowas nicht direkt---zahl--char?naja, wirst schon wissen was du willst
du hast es erkannt! :p
-
also irgendwie habe ich das Gefühl, du hast das nicht ganz verstanden...
aber ich glaube, du willst einfach einen Zahlenwert (eben auch ein Fließkommawert) in einzelne char-Werte je Ziffer zerlegen, oder?
MSDN schrieb:
_gcvt
Converts a floating-point value to a string, which it stores in a buffer.char *_gcvt( double value, int digits, char *buffer );
Routine Required Header Compatibility
_gcvt <stdlib.h> Win 95, Win NTFor additional compatibility information, see Compatibility in the Introduction.
Libraries
LIBC.LIB Single thread static library, retail version
LIBCMT.LIB Multithread static library, retail version
MSVCRT.LIB Import library for MSVCRT.DLL, retail versionReturn Value
_gcvt returns a pointer to the string of digits. There is no error return.
Parameters
value
Value to be converted
digits
Number of significant digits stored
buffer
Storage location for result
Remarks
The _gcvt function converts a floating-point value to a character string (which includes a decimal point and a possible sign byte) and stores the string in buffer. The buffer should be large enough to accommodate the converted value plus a terminating null character, which is appended automatically. If a buffer size of digits + 1 is used, the function overwrites the end of the buffer. This is because the converted string includes a decimal point and can contain sign and exponent information. There is no provision for overflow. _gcvt attempts to produce digits digits in decimal format. If it cannot, it produces digits digits in exponential format. Trailing zeros may be suppressed in the conversion.
Example
/* _GCVT.C: This program converts -3.1415e5
* to its string representation.
*/#include <stdlib.h>
#include <stdio.h>void main( void )
{
char buffer[50];
double source = -3.1415e5;
_gcvt( source, 7, buffer );
printf( "source: %f buffer: '%s'\n", source, buffer );
_gcvt( source, 7, buffer );
printf( "source: %e buffer: '%s'\n", source, buffer );
}Output
source: -314150.000000 buffer: '-314150.'
source: -3.141500e+005 buffer: '-314150.'MSDN bietet hierfür was schönes...
...und dein char-Array enthält ja dann schließlich die einzelnen Ziffern, auf die du wahlfrei sequenziell zugreifen kannst.
Geht natürlich auch mit "sscanf".
-
Wenn du eine Dezimalzahl in einem string haben willst, dann mach es so wie in folgendem FAQ-Beitrag beschrieben:
Einmal Zahl nach String und zurück
P.S. Du kannst in einem std::string einzeln auf die chars zugreifen, wie bei einem normalen Array.
-
s.u.
-
danke... hat mir weitergeholfen!
-
ich benutze linux hat jemand den code fer funktion _gcvt , schheint nicht in meiner header datei zu sein
-
Hallo,
sollte aber in deiner Header-Datei stdlib.h sein, wenn auch ohne "underscore", denn:
http://www.die.net/doc/linux/man/man3/gcvt.3.html
MfG
-
natürlich solltest du <cstdlib> includieren, wie es sich für ein C++-Programm gehört
MfG
-
jetzt funktioniert alles... thx
-
kuehlwalda schrieb:
string ClSTD_FLOAT_TO_STRING :: get_stelle(float x) { if(x>=0 && x<1) return "0"; else if(x>=1 && x<2) return "1"; else if(x>=2 && x<3) return "2"; else if(x>=3 && x<4) return "3"; else if(x>=4 && x<5) return "4"; else if(x>=5 && x<6) return "5"; else if(x>=6 && x<7) return "6"; else if(x>=7 && x<8) return "7"; else if(x>=8 && x<9) return "8"; else if(x>=9) return "9"; }
Das ist doch jetzt nicht dein Ernst, oder ? :xmas1:
-
ok, bitte vergessen.
Ist persönliche Steinzeit und tut außerdem was anderes.Julio