Batch - Dividieren ? (mit kommastelle)
z.B.
-> CMD: set /a 120/13 = 9
-> RRECHNER: 120/13 = 9,2
Hey
ich würde gerne wissen ob es möglich ist mit der CMD
mit kommastellen zu dividieren...
Ich brauche dies für eine prozent rechnung:
X/100*X
nur ohne kommastellen oder ohne genaue ausgabe der rechnung
ist das kaum präzise durchzuführen...
hat jemand eine lösung ?
(unter umständen auch mit VBS)
:- )
Vielen dank für die eventuelle Mühe
Nowo
-> CMD: set /a 120/13 = 9
-> RRECHNER: 120/13 = 9,2
Hey
ich würde gerne wissen ob es möglich ist mit der CMD
mit kommastellen zu dividieren...
Ich brauche dies für eine prozent rechnung:
X/100*X
nur ohne kommastellen oder ohne genaue ausgabe der rechnung
ist das kaum präzise durchzuführen...
hat jemand eine lösung ?
(unter umständen auch mit VBS)
:- )
Vielen dank für die eventuelle Mühe
Nowo
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 81254
Url: https://administrator.de/contentid/81254
Ausgedruckt am: 26.11.2024 um 04:11 Uhr
26 Kommentare
Neuester Kommentar
Hallo Nowologix!
Zwischen den Anführungszeichen kannst Du im Prinzip jede gültige Berechnung (auch, wie gezeigt, mit Variablen) angeben.
Grüße
bastla
(unter umständen auch mit VBS)
Na dann: @echo off & setlocal
set Zahl1=120
set Zahl2=13
set Stellen=2
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% "%Zahl1%/%Zahl2%" %Stellen%') do set Ergebnis=%%i
echo %Ergebnis%
Grüße
bastla
Moin Nowologix,
nein, es lässt sich nicht am CMD-Prompt/im Batch mit Nachkommastellen rechnen.
Das Ergebnis allerdings, wenn Du es nur irgendwohin schreiben willst, kannst Du natürlich erzeugen.
Es steht dir ja frei, statt 120/13 [soll herauskommen: 9,2] zu rechnen.
...dann hast Du die "richtigen" Zahlenwerte, aber (noch) kein Komma dazwischen.
Wenn es gar nicht anders geht, dann:
In Aktion:
[is' aber alles Unsinn eigentlich.... Rechnen mit Nachkommastellen is'nich im Batch.]
Grüße
Biber
[Edit] P.S. @bastla: FOR-Anweisungen kann ich auch...
[/Edit]
nein, es lässt sich nicht am CMD-Prompt/im Batch mit Nachkommastellen rechnen.
Das Ergebnis allerdings, wenn Du es nur irgendwohin schreiben willst, kannst Du natürlich erzeugen.
Es steht dir ja frei, statt 120/13 [soll herauskommen: 9,2] zu rechnen.
>set /a 1200/13
92
-oder-
>set /a 12000/13
923
Wenn es gar nicht anders geht, dann:
:: BatschDivide.cmd
@echo off & setlocal enabledelayedexpansion
REM Para1 zu teilende Zahl
REM Para2 Divisor
REM Para3 Anzahl Nachkommastellen
If [%3]== (echo Syntax %0: AuffemStrich UntermStrich NK) & goto :eof
Set "xNullen=000000000"
Set /a x=1!xNullen:~-%3!
set /a ProzMalX=%1 * x /%2
set /a ProzVK=ProzMalX / x
set /a ProzNK=ProzMalX %% x
Echo %1 / %2 = %prozVK%,%prozNK% [Genauigkeit %3 Nachkommastellen]
>e:\test\BatschDivide.cmd 120 13 3
120 / 13 = 9,230 [Genauigkeit 3 Nachkommastellen]
(=22:37:05 D:\temp=)
>e:\test\BatschDivide.cmd 121 13 3
121 / 13 = 9,307 [Genauigkeit 3 Nachkommastellen]
>e:\test\BatschDivide.cmd 121 13 2
121 / 13 = 9,30 [Genauigkeit 2 Nachkommastellen]
[is' aber alles Unsinn eigentlich.... Rechnen mit Nachkommastellen is'nich im Batch.]
Grüße
Biber
[Edit] P.S. @bastla: FOR-Anweisungen kann ich auch...
>for /f "tokens=5" %i in ('e:\test\BatschDivide.cmd 121 13 2') do @echo Ergebnis: %i
Ergebnis: 9,30
Nachtrag.
bastlas Parameterübergabe (mit 2 Parametern) ist in der Tat etwas weniger holprig.
Also dann:
Demo:
Grüße
Biber
bastlas Parameterübergabe (mit 2 Parametern) ist in der Tat etwas weniger holprig.
Also dann:
:: BatschDivide.cmd
@echo off & setlocal enabledelayedexpansion
REM Para1 Quotient zweier ganzzahlen zB 130/12
REM Para2 Anzahl Nachkommastellen
If [%2]== (echo Syntax %0: Quotient NK) & goto :eof
Set "xNullen=000000000"
Set /a x=1!xNullen:~-%2!
set /a ProzMalX=x*%1
set /a ProzVK=ProzMalX / x
set /a ProzNK=ProzMalX %% x
Echo %1 = %prozVK%,%prozNK% [Genauigkeit %2 Nachkommastellen]
>e:\test\BatschDivide.cmd 121/13 2
121/13 = 9,30 [Genauigkeit 2 Nachkommastellen]
>e:\test\BatschDivide.cmd 121/13 3
121/13 = 9,307 [Genauigkeit 3 Nachkommastellen]
>e:\test\BatschDivide.cmd 121/13 4
121/13 = 9,3076 [Genauigkeit 4 Nachkommastellen]
Grüße
Biber
Moin miniversum,
Probiere es mit den Werten 101/25 oder 100/34 ...
Aber gut, auch ich hatte in meinem Schnipsel noch einen Fehler drin:
Problem. wenn die erste(n) Nachkommastellen mit "0" beginnen, wird diese "0" einfach weggeworfen.
Beispiel:
Aber, wie mehrfach geschrieben, es geht doch gar nicht im Batch.
Das nächste Problem wäre, dass ja auch nicht gerundet werden würde, sondern abgeschnitten.
Von daher gilt (wie bei Datumsberechnungen) entweder VBS o.ä. nehmen oder genau wissen, wo die Batch-Minen liegen.
Grüße
Biber
Warum nicht einfach so:
Hmmm .... weil es nicht stimmt? Weil es doch sowieso im Batch nicht geht? Probiere es mit den Werten 101/25 oder 100/34 ...
Aber gut, auch ich hatte in meinem Schnipsel noch einen Fehler drin:
:: BatschDivide.cmd v03
@echo off & setlocal enabledelayedexpansion
REM Para1 Quotient zweier ganzzahlen zB 130/12
REM Para2 Anzahl Nachkommastellen
If [%2]== (echo Syntax %0: Quotient NK) & goto :eof
Set "xNullen=000000000"
Set /a x=1!xNullen:~-%2!
set /a ProzMalX=x*%1
set /a ProzVK=ProzMalX / x
REM ## BUG in V02 set /a ProzNK=ProzMalX %% x ###fixed in next line
set ProzNK=!ProzMalX:~-%2!
Echo %1 = %prozVK%,%prozNK% [Genauigkeit %2 Nachkommastellen]
Problem. wenn die erste(n) Nachkommastellen mit "0" beginnen, wird diese "0" einfach weggeworfen.
Beispiel:
>e:\test\BatschDivide_V2.cmd 101/25 2
101/25 = 4,4 [Genauigkeit 2 Nachkommastellen]
#### hier im alten code "4,4" statt "4,04" ###
>e:\test\BatschDivide.cmd 101/25 2
101/25 = 4,04 [Genauigkeit 2 Nachkommastellen]
## bereinigter Schnipsel.
Aber, wie mehrfach geschrieben, es geht doch gar nicht im Batch.
Das nächste Problem wäre, dass ja auch nicht gerundet werden würde, sondern abgeschnitten.
Von daher gilt (wie bei Datumsberechnungen) entweder VBS o.ä. nehmen oder genau wissen, wo die Batch-Minen liegen.
Grüße
Biber
... und
liefert bei mir ein (korrekt gerundetes) Ergebnis von "33,67".
Um auch noch das von miniversum angesprochene Problem "Komma vs Punkt" (das allerdings in Nowologix Beispielen noch kein Kriterium war) zu entschärfen, noch folgende Variante:
Grüße
bastla
@echo off & setlocal
set Zahl1=101
set Zahl2=3
set Stellen=2
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% "%Zahl1%/%Zahl2%" %Stellen%') do set Ergebnis=%%i
echo %Ergebnis%
Um auch noch das von miniversum angesprochene Problem "Komma vs Punkt" (das allerdings in Nowologix Beispielen noch kein Kriterium war) zu entschärfen, noch folgende Variante:
@echo off & setlocal
set Zahl1=101,3
set Zahl2=3
set Stellen=2
set R=%temp%\Rechne.vbs
echo Set a=WScript.Arguments:WScript.Echo FormatNumber(Eval(Replace(a(0),",",".")),a(1))>%R%
for /f %%i in ('cscript //nologo %R% "%Zahl1%/%Zahl2%" %Stellen%') do set Ergebnis=%%i
echo %Ergebnis%
Grüße
bastla
Hallo Bastla
Ja das Problem ist gelößt.
MIt
Ergibt
Auch
Bring das richtig Ergebnis
Aber
Bringt 0,529978 aus und nicht 18,089125
Also sehr selltsam.
Ja das Problem ist gelößt.
MIt
:: BatschDivide.cmd v03
@echo off & setlocal enabledelayedexpansion
REM Para1 Quotient zweier ganzzahlen zB 130/12
REM Para2 Anzahl Nachkommastellen
If [%2]== (echo Syntax %0: Quotient NK) & goto :eof
Set "xNullen=000000000"
Set /a x=1!xNullen:~-%2!
set /a ProzMalX=x*%1
set /a ProzVK=ProzMalX / x
set "ProzMalX=%xNullen%%ProzMalX%"
set ProzNK=!ProzMalX:~-%2!
Echo %1 = %prozVK%,%prozNK% [Genauigkeit %2 Nachkommastellen]
Ergibt
>e:\test\BatschDivide_V3.cmd 23/1223 6
23/1223 = 0,018806 [Genauigkeit 6 Nachkommastellen]
Auch
>e:\test\BatschDivide_V3.cmd 2224/1223 6
2224/1223 = -1,693350 [Genauigkeit 6 Nachkommastellen]
Aber
>e:\test\BatschDivide_V3.cmd 22123/1223 6
22123/1223 = 0,529978 [Genauigkeit 6 Nachkommastellen]
Also sehr selltsam.
Hallo mycroftone!
Hatte Biber weiter oben erwähnt, dass das Ganze in Batch eigentlich nicht geht?
Da der Zahlenbereich für arithmetische Operationen nur von -2147483648 bis 2147483647 reicht, sind auch der Hilfkonstruktion "multiplizieren wir zwischendurch eben mal kurz mit 1000000" Grenzen gesetzt (für 4 Nachkommastellen ginge es sich noch aus) ...
Grüße
bastla
Hatte Biber weiter oben erwähnt, dass das Ganze in Batch eigentlich nicht geht?
Da der Zahlenbereich für arithmetische Operationen nur von -2147483648 bis 2147483647 reicht, sind auch der Hilfkonstruktion "multiplizieren wir zwischendurch eben mal kurz mit 1000000" Grenzen gesetzt (für 4 Nachkommastellen ginge es sich noch aus) ...
Grüße
bastla
Moin mycroftone,
ergänzend zu bastla nur noch ein weiteres Indiz für das "geht eigentlich gar nicht mit Batch"
-> diese ganze Set /a-Arie ist insgesamt so etwas von buggy hingewurschtelt, dass ich sie wirklich nur zum Hochzählen meines running gag counters rgc verwende.
Und auch das nur, solange der Wert so klein bleibt, dass er dem korreliert, was sich die Redmonder PraktikantInnen mit ihrer begrenzten Phantasie so vorstellen konnten.
Nimm diesen "Befehlszeileninterpreter" cmd.exe nur so ernst, wie er es verdient.
Ist ein kleines Tool für das Nötigste - aber ich glaube nicht daran, dass Heerscharen von hochbezahlten EntwicklerInnen da seit Jahrzehnten an einer Version 12.0 Premium Delüx rumfeilen.
In B- und C-Movies ist es oft so, dass du mit einer abgelaufenen PayBack-Karte in Sekundenbruchteilen eine Haustür auch ohne Schlüssel öffnen kannst.
Das kann klappen, muss aber nicht.
Im Normalfall nehmen die meisten in solchen Situationen statt einer abgelaufenen PayBack-Karte eine gültige Kreditkarte und rufen einen Schlüsselnotdienst.
Weil die Erfolgsaussichten mit dem richtigen Werkzeug spürbar höher sind.
Grüße
Biber
ergänzend zu bastla nur noch ein weiteres Indiz für das "geht eigentlich gar nicht mit Batch"
C:\Temp>set /a 2212300/1223
1808
C:\Temp>set /a 22123000/1223
18089
C:\Temp>set /a 221230000/1223
180891
C:\Temp>set /a 2212300000/1223
-1702916
Und auch das nur, solange der Wert so klein bleibt, dass er dem korreliert, was sich die Redmonder PraktikantInnen mit ihrer begrenzten Phantasie so vorstellen konnten.
Nimm diesen "Befehlszeileninterpreter" cmd.exe nur so ernst, wie er es verdient.
Ist ein kleines Tool für das Nötigste - aber ich glaube nicht daran, dass Heerscharen von hochbezahlten EntwicklerInnen da seit Jahrzehnten an einer Version 12.0 Premium Delüx rumfeilen.
In B- und C-Movies ist es oft so, dass du mit einer abgelaufenen PayBack-Karte in Sekundenbruchteilen eine Haustür auch ohne Schlüssel öffnen kannst.
Das kann klappen, muss aber nicht.
Im Normalfall nehmen die meisten in solchen Situationen statt einer abgelaufenen PayBack-Karte eine gültige Kreditkarte und rufen einen Schlüsselnotdienst.
Weil die Erfolgsaussichten mit dem richtigen Werkzeug spürbar höher sind.
Grüße
Biber
Hi Leute.
Ich bin jetzt nicht gerade der grösste Computerspezialist, aber ich glaube ich habe eine einfache Methode gefunden wie man Zahlen mit Kommastellen Dividieren kann:
z.B. 15/4=3 das gäbe dann die erste Variable= Zahl1
Dann könnt ihr für die erste Kommastelle 15*10=150 Das könnt ihr dann durch die Zahl teilen also 150/4=37
Jetzt könnt ihr 37%10 Dann kommt ihr auf 7 das ist dann die Zweite Variable= Zahl2
dann könnt ihr echo %Zahl1%.%Zahl2%
falls ihr noch die dritte Kommastelle wollt müsst ihr einfach 15*100=1500/4=375%100 =5 =Zahl3
USW..
ich versuche das jetzt noch als CMD programm zu schreiben aber wahrscheinlich ist es dann nicht ganz richtig. Wie gesagt bin noch so gut bin ja auch erst 14 XD
Ich bin jetzt nicht gerade der grösste Computerspezialist, aber ich glaube ich habe eine einfache Methode gefunden wie man Zahlen mit Kommastellen Dividieren kann:
z.B. 15/4=3 das gäbe dann die erste Variable= Zahl1
Dann könnt ihr für die erste Kommastelle 15*10=150 Das könnt ihr dann durch die Zahl teilen also 150/4=37
Jetzt könnt ihr 37%10 Dann kommt ihr auf 7 das ist dann die Zweite Variable= Zahl2
dann könnt ihr echo %Zahl1%.%Zahl2%
falls ihr noch die dritte Kommastelle wollt müsst ihr einfach 15*100=1500/4=375%100 =5 =Zahl3
USW..
ich versuche das jetzt noch als CMD programm zu schreiben aber wahrscheinlich ist es dann nicht ganz richtig. Wie gesagt bin noch so gut bin ja auch erst 14 XD
Diese Frage ist zwar schon "ziemlich" alt, aber falls jemand so etwas in der Art wissen möchte ist es vllt nicht schlecht ;)
Habe in den tiefen meiner Festplatte noch ein Programm gefunden:
Hatte zwar erst keine Ahnung was ich da mal zusammengeschraubt hatte, aber habs hier mal einfacher formuliert:
Habe in den tiefen meiner Festplatte noch ein Programm gefunden:
@echo off
title dividieren
echo DIVIDIEREN:
:BEG
set /p "ui=Aufgabe: "
:BEGFALSE
set /p "ch=[R]est/[D]ezimal "
if %ch%==r goto :Rest
if %ch%==d goto :Dezi
echo error
goto BEGFALSE
:Rest
for /f "tokens=1,2 delims=/" %%a in ("%ui%") do set a=%%a & set b=%%b
set /a los=a/b
set /a los2=a-(los*b)
echo %los% rest %los2%
pause >nul
goto BEG
:Dezi
for /f "tokens=1,2 delims=/" %%a in ("%ui%") do set a=%%a & set b=%%b
set /a los=a/b
set /a los2=a-(los*b)
set /a losx=los2
set erg=%los%,
set /a count=0
:LOOP
set /a count+=1
if %count%==100 echo schon %count% dezimalstellen berechnet. Fortfahren? [j]/[n] & set /p "ui="
if %count%==200 echo schon %count% dezimalstellen berechnet. Fortfahren? [j]/[n] & set /p "ui="
if %count%==500 echo schon %count% dezimalstellen berechnet. Fortfahren? [j]/[n] & set /p "ui="
if %count%==1000 echo schon %count% dezimalstellen berechnet. Fortfahren? [j]/[n] & set /p "ui="
if %count%==5000 echo schon %count% dezimalstellen berechnet. Fortfahren? [j]/[n] & set /p "ui="
if %count%==10000 echo schon %count% dezimalstellen berechnet. Fortfahren? [j]/[n] & set /p "ui="
if %ui%==n goto ERG
set /a losxx=(losx*10)/b
set /a losxxx=(losx*10)-(losxx*b)
if %losxxx%==0 goto :ERG
set /a losx=losxxx
set erg=%erg%%losxx%
goto :LOOP
:ERG
echo %erg%
pause >nul
echo.
goto :BEG
Hatte zwar erst keine Ahnung was ich da mal zusammengeschraubt hatte, aber habs hier mal einfacher formuliert:
@echo off
set /p "ui=Aufgabe: "
::mithilfe von for den Nenner vom Zähler trennen;
for /f "tokens=1,2 delims=/" %%a in ("%ui%") do set a=%%a & set b=%%b
::den ganzzahligen Wert ausrechnen;
set /a los=a/b
::Rest ermitteln;
set /a losx=a-(los*b)
set erg=%los%,
set /a count=0
:LOOP
set /a count+=1
::folgendes dient zur Abfrage wie viele dezimalstellen ermittelt werden sollen;
if %count%==100 echo schon %count% dezimalstellen berechnet. Fortfahren? [j]/[n] & set /p "ui="
if %count%==200 echo schon %count% dezimalstellen berechnet. Fortfahren? [j]/[n] & set /p "ui="
if %count%==500 echo schon %count% dezimalstellen berechnet. Fortfahren? [j]/[n] & set /p "ui="
if %count%==1000 echo schon %count% dezimalstellen berechnet. Fortfahren? [j]/[n] & set /p "ui="
if %count%==5000 echo schon %count% dezimalstellen berechnet. Fortfahren? [j]/[n] & set /p "ui="
if %count%==10000 echo schon %count% dezimalstellen berechnet. & goto ERG
if %ui%==n goto ERG
::Vorgehen wie beim schriftlichen dividieren;
set /a losxx=(losx*10)/b
set /a losxxx=(losx*10)-(losxx*b)
if %losxxx%==0 goto :ERG
set /a losx=losxxx
::kommastelle wird zum ergebnis hinzugefügt;
set erg=%erg%%losxx%
goto :LOOP
:ERG
echo %erg%
pause >nul