Batch-Datei hinter dem Komma rechnen lassen?

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet





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





Affekopf99  19.04.2017, 09:36

Doch geht, siehe meine Antwort ^^

2
qugart  19.04.2017, 09:48
@Affekopf99

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.

2
Affekopf99  20.04.2017, 07:38
@qugart

Trotzdem habe ich visuell eine Gleitkommazahl generiert, und das mit nativen Batch werkzeugen. wieso sollte dien icht der din norm entsprechen?

2
qugart  21.04.2017, 08:52
@Affekopf99

"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.

0
MarkusGenervt  23.04.2017, 20:35
@qugart

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! ;)

0
Puntherline 
Beitragsersteller
 19.04.2017, 09:36

Vielen Dank! Funktioniert ohne Probleme!

1

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?


timlg07  20.04.2017, 13:36

Ja das liegt daran dass Batch nur int Variablen kennt

2
Puntherline 
Beitragsersteller
 19.04.2017, 09:27

"Fehlende Klammer"- Error kommt dabei heraus. Trotzdem Danke!

1
@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)


MarkusGenervt  23.04.2017, 20:22

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
0