Hi User Ich hab ein Programm in Bascom geschrieben, welches die Spannung an einem AD- Kanal über die RS232 Schnittstelle ausgibt. Das Problem ist, dass das Ergebnis neun Nachkommastellen hat, mir aber eine reichen würde. Der ROUND Befehl in Bascom bringt das nicht, der rundet auf die nächste ganze Zahl, was ich ja nicht will. Aus einem Basic Tutorial hab ich den Befehl ROUND(Zahl,1) gefunden. Dieser soll eigentlich den Wert Zahl auf eine Nachkommastelle runden. In Bascom funktioniert das aber nicht--> Fehlermeldung. Wer kann helfen? Allzu schwer kann es ja nicht sein. Gruss Thomas
>Wer kann helfen? Das Bascom-Manual. >Allzu schwer kann es ja nicht sein. Der Meinung sind viele, die mit Bascom programmieren. (Kritik meinerseits an der Arbeitsweise von Bascom-"Programmierern".) http://avrhelp.mcselec.com/bascom-avr.html Notfalls kannst du die Zahl auch mit 10 multiplizieren, dann runden und wieder durch 10 teilen: x = ROUND(n*10)/10
Ich gehe mal davon aus, dass du die Zahl irgendwie ausgeben willst. Mit FORMAT o.dergl. (siehe avrhelp-link ein Post weiter oben von mir) kann man die Zahlenausgabe formatieren.
Der Befehl zur Formatierung heisst bei BASCOM FUSING (gibt einen formatierten String eines Singles zurück). Gruß Olaf
Hallo Olaf Die Variante mit FUSING hat zum Erfolg geführt. Das bisherige Ergebnis war vom Typ Single. Wandlung in String und dann Fusing bringts. Besten Dank. An fieser, klugscheissender Rahul Ich bin mir darüber im klaren das Bascom "Programmieren" nichts für Spezialisten ist, aber das Programm ist ein kleiner Teil meiner Diplomarbeit. Zur Einarbeitung habe ich keine Zeit, und in Bascom hats nur 2 Tage gebraucht, bis das Programm lief (bis auf die Kommastellen halt). Ich finde das so voll korrekt, aber wenn man kompliziertere Sachen machen will sollte man lieber ein anderes Programm nehmen. Also besten Dank an alle! Thomas
>Ich bin mir darüber im klaren das Bascom "Programmieren" nichts für >Spezialisten ist Hab ich nie behauptet. >Ich finde das so voll korrekt, aber wenn man kompliziertere >Sachen machen will sollte man lieber ein anderes Programm nehmen. Muß man aber nicht. Es ist bloß inzwischen hinlänglich "bekannt", dass Leute, die mit BASCOM programmieren, meinen, dass das der einfachste Weg sei, und dann bei jedem kleineren Problem um Hilfe schreien. Deswegen auch der etwas "unfreundliche" Hinweis auf das Datenblatt. Es geht also nicht um Bascom, sondern um den "NDBU" (normal dummer Bascom User), der Bascom-Benutzer in ein etwas schlechtes Licht gerückt hat. Dass diesen "Zorn" auch gerne mal die falschen abbekommen, ist vielleicht verständlich, aber nicht entschuldbar. Und das, wo ich mir eigentlich vorgenommen hatte, mich nicht mehr darüber aufzuregen.
> Ich bin mir darüber im klaren das Bascom "Programmieren" nichts für > Spezialisten ist, Es geht ja nicht um BASCOM an sich. Es geht darum, dass viele BASCOM Programmierer, die hierher kommen, sowas wie Doku bzw. Online-Hilfe durchblättern oder, Gott bewahre, Lesen für überflüssigen Luxus halten. Die Online- Hilfe von BASCOM ist sehr gut. Nur reinschauen müsste man halt mal.
Hallo, auch ich habe mich etliche Stunden mit dem Runden auf eine bestimmte Anzahl von Kommastellen beschäftigt. Nun hoffe ich, dass ich mit Fusing zum Ziel komme. Werde es gleich testen, aber lt. der Hilfe von BASCOM wird es wohl mein Problem lösen. Ich bin bislang immer so vorgegangen: var= 12,845999 var = var * 100 ' ich wollte auf 2 Kommastellen runden var = Round(var) var = var/100 Das klappte aber nie, warum weiss ich nicht. Die gerundete var war 1285 und nach dem Teilen durch 100 gab es wieder etliche Kommastellen! Ich bin davon ausgegangen, dass ich dann 12,85 als Ergebnis bekomme. Vielen Dank für Eure Anregungen, fals noch jemand schreiben könnte, warum meine Methode nicht zum Erfolg führte, wäre prima... mfg Jürgen
Jürgen E. schrieb: > Vielen Dank für Eure Anregungen, fals noch jemand schreiben könnte, > warum > meine Methode nicht zum Erfolg führte, wäre prima... http://de.wikipedia.org/wiki/Gleitkommazahl#Einschr.C3.A4nkungen_und_deren_mathematische_Grundlagen
@Jürgen E. (joe73) BASCOM rundet intern nach einer Division nicht! Also entstehen beim binären Rechnen automatisch "binäre" Nachkommastellen, d.h. eine Binärzahl mit ggf. maximaler Länge. Beim Konvertieren ins Dezimalsystem sind immer noch Stellenwerte mit 1/2, 1/4, 1/8, 1/16 u.s.w. vorhanden, so dass bei der Ausgabe der Dezimalzahl diese Werte als Nachkommastellen entstehen. Noch eine Anmerkung zum Streit um C++ contra BASCOM. Man möge mir zeigen, was in C++ geht und in BASCOM nicht geht! Dabei ist PASCAL doch auch noch eine interessante Alternative. W.
Hallo, vielen Dank für die schnellen Antworten. Ist mir zwar alles etwas zu "mathematisch" aber nun weis ich wenigstens woran es gelegen hatte bei meiner Vorgehensweise. Auf jeden Fall funktioniert es nun mit Fusing. Hatte es gerade getestet. mfg Jürgen
Wolfgang Schmidt schrieb: > Man möge mir zeigen, was in C++ geht und in BASCOM nicht geht! Wenn etwas sehr schnell oder klein sein soll, muss man C oder noch besser Assembler nehmen. Bei komplexen Sachen dann doch lieber C, da hier die Übersicht bewahrt wird. Schreib doch mal einen Webserver mit Bascom und vergleiche die Geschwindigkeit mit einem C-Webserver. Bascom pfuscht zu viel im Code herum. Das Argument Bascom wäre einfacher zählt nicht: Ich wollte mal Basic ausprobieren, nachdem ich jahrelang c++ programmiert habe. Ich komme damit überhaupt nicht zurecht. Ich persönlich finde C(++) eine deutlich einfachere Sprache als Basic.
ich (Bascom- Programmierer), wäre auch gerne einer von diesen wunderbaren C -und/ oder Assembler - Programmierern. Sobald ich in Rente bin und viel Zeit habe , werde ich das auch werden, aber vorher möchte ich schon mal ein paar Schaltungen zum Laufen bringen... Seit Jahren verwende ich Tranistoren, ohne vorher Halbleiterphysik studiert zu haben und das klappt auch ganz prima.
Nach Fortran, Algol, Macros für Telefunkengroßrechner, Assembler für schnelle Messwerterfassung, Basic für Wang Tischrechner, PASCAL und Assembler für Apple II, C in der Firma, Assembler für 68000, ein wenig Forth u.s.w. bevorzuge ich ganz klar BASCOM und PASCAL. In PASCAL kann ich arithmetische Ausdrücke ganz schreiben, in BASCOM muss ich diese zerlegen. Wenn's schnell werden muss, dann wird Assemblercode eingefügt. Aus meiner sich gibt's nicht unschöneres als die Syntax von C++. Es fehlt auch die Orientierung an der mathematisch logischen Schreibweise von Zuweisungen, Vergleichen, Indizierungen, so dass C++ für Nichtmathematiker ohne eine derartige "Vorbelastung" wahrscheinlich einfacher zu lesen ist. W.
Vielleicht hilft auch das weiter: Config Single = Scientific , Digits = 2 Gruss Klaus
Klaus De lisson schrieb: > Vielleicht hilft auch das weiter: > > Config Single = Scientific , Digits = 2 > > Gruss Klaus Endlich mal ein Beitrag der Ergebnisse liefert. Alles andere nur dummes Gelabber wer welche Programmiersprache vorzieht usw.
ggg schrieb: > Klaus De lisson schrieb: >> Vielleicht hilft auch das weiter: >> >> Config Single = Scientific , Digits = 2 >> >> Gruss Klaus > > Endlich mal ein Beitrag der Ergebnisse liefert. Alles andere nur dummes > Gelabber wer welche Programmiersprache vorzieht usw. und warum und wie entstanden? richtig, ein hochqualifizierter BASCOM-"Programmierer" bekommt es nicht hin die Dokumentation zu lesen und zu verstehen. Es ist immer dasselbe und überheblich dazu "zeig mir was man in C machen kann was in Bascom nicht geht".....Junge, wenn du auch nur ansatzweise was davon verstehen würdest, müsste man nicht solch eine Grütze lesen!
ggg schrieb: > Klaus De lisson schrieb: >> Vielleicht hilft auch das weiter: >> >> Config Single = Scientific , Digits = 2 >> >> Gruss Klaus > > Endlich mal ein Beitrag der Ergebnisse liefert. Alles andere nur dummes > Gelabber wer welche Programmiersprache vorzieht usw. Viele der Leute mit ansatzweise Ahnung schaffen es nicht auf eine einfach zu beantwortende Frage eine einfache Antwort zu geben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.