Batch-Datei hinter dem Komma rechnen lassen?
Hallo liebe Gutefrage.net-Community!
Ich muss mehrmals täglich eine Rechenaufgabe lösen, bei der mehrere Zahlen und Formeln in der selben Reihenfolge mit den selben Zahlen angewandt werden müssen, lediglich eine Zahl verändert sich. Bisher habe ich alles geschafft. Allerdings möchte ich, dass die Batch-Datei auch hinter dem Komma rechnet (mind. 2 Stellen. Die Zahlen runden ist mir egal, da es nur eine recht Grobe rechnung sein soll und es keinen Unterschied macht. Hier der bisherige (vereinfachte) Code mit simplem Rechenweg.
@echo off
:ZIFFER1
set /p ziffer1= "Erste Zahl:"
goto CALCULATION
:CALCULATION
set /a result = (%ziffer1%/8+25)
echo Das Ergebnis ist %result%.
Pause
Ich bedanke mich im Voraus für eure Antworten!
4 Antworten
Nachkomma geht im Batch nicht.
Da brauchts mindestens VBS.
@echo off & setlocal
:ZIFFER1
set /p ziffer1= "Erste Zahl:"
goto CALCULATION
:Calculation
set R=%temp%\Rechne.vbs
echo Set a=WScript.Arguments:WScript.Echo FormatNumber(Eval(a(0)),a(1))>%R%
for /f %%i in ('cscript //nologo %R% "%ziffer1%/8+25" 2') do set Ergebnis=%%i
echo %Ergebnis%
Die 2 hinter der Rechnung gibt die Nachkommastellen an.
"%ziffer1%/8+25" 2
Auch damit werden keine Dezimalzahlen berechnet.Batch kann das schlicht und ergreifend nicht.
Es werden nur zwei Berechnungen ausgeführt und die dann als eine Zahl dargestellt, die nicht der DIN 1333 entspricht.
Der Vorteil von VBS ist, dass man da quasi jegliche Rechnung durchführen kann. Man muss die nur in die Anführungszeichen setzen.
Trotzdem habe ich visuell eine Gleitkommazahl generiert, und das mit nativen Batch werkzeugen. wieso sollte dien icht der din norm entsprechen?
"Visuell" generiert man das auch, indem man mit Tipp-Ex auf dem Monitor rumschmiert. Wenig elegante Lösungen sind wenig elegant.
Das Ergebnis enstpricht eben nicht der DIN. Kann ich auch nicht ändern.
Ein DIN-konformes Ergebnis war nicht die Aufgabenstellung.
Für die Ausgabe an der Console ist es auch in keiner Weise erforderlich.
Die Batch-Lösung ist hier sogar effektiver, weil einfach bei weitem weniger Operationen durchgeführt werden müssen, keine Festspeicher-Operationen durchgeführt werden müssen und auch nicht erst der ganze CSCRIPT-Ballast geladen werden muss, der u.U. von diversen Internet Securities sogar blockiert wird.
Man muss nicht immer das Auto aus der Garage holen. Manchmal kommt man zu Fuß schneller ans Ziel! ;)
Die anderen haben dein Problem schon gelöst. Ich gebe aber noch meinen Senf dazu :)
Musst du wirklich Batch nutzen? Ich verstehe, dass das für viele der erste Berührungspunkt mit Programmieren ist und dann alles gerne in Batch gemacht wird.
Aber ich denke, dass dir vielleicht andere Sprachen besser gefallen würden. Python bietet sich z.B. für sowas sehr gut an.
Sieht dann so aus:
ziffer1 = float(input("Erste Zahl: ")) # Eingabe lesen und in Kommazahl umwandeln result = ziffer1 / 8 + 25 print("Das Ergebnis ist " + str(result))
Ungetestet: mal probieren, durch 8.0 statt durch 8 zu teilen, um Gleitkommaarithmetik zu erzwingen?
"Fehlende Klammer"- Error kommt dabei heraus. Trotzdem Danke!
@echo off
:ZIFFER1
set /p ziffer1= "Erste Zahl:"
goto CALCULATION
:CALCULATION
set teiler=8
set /a result=(%ziffer1%/%teiler%+25)
set /a rest=%ziffer1%-(%result%-25)*%teiler%
echo %rest%
set /a rest2=%rest%*100
echo %rest2%
set /a kommazahl=%rest2%/%teiler%
echo Das Ergebnis ist %result%.%kommazahl%
Pause
Das geht :)
bei %rest%* kannst du die nachkommastellenlänge definieren (1000 wären 3 nachkommastellen)
Der Drops ist hier zwar schon gelutscht, aber das geht auch direkter:
@echo off
:ZIFFER1
set /p ziffer1= "Erste Zahl:"
goto CALCULATION
:CALCULATION
set /a integer=%ziffer%*100/8
set fraction=00%integer:~-2%
set fraction=%fraction:~-2%
set /a integer=%integer%/100+25
set result=%integer%.%fraction%
echo Das Ergebnis ist %result%
Pause
Doch geht, siehe meine Antwort ^^