Kommastellen in Batch
Hallo,
ich habe folgendes Problem:
ich Frage eine per sqlplus ab... die Ausgabe sieht folgendermaßen aus:
C:\>set /a WERT2=4335247.73856934
Fehlender Operator
C:\>echo 4335247
4335247
Das Echo will ich später auch in eine Datei schreiben.
Wieso fallen beim Echo die Nachkommastellen alle weg, wenn sie oben noch ausgegeben werden?
Gibt es eine möglichkeit diese im echo auch noch auszugeben?
Der Teil des Skripts sieht folgendermaßen aus:
Gruß
Hans
ich habe folgendes Problem:
ich Frage eine per sqlplus ab... die Ausgabe sieht folgendermaßen aus:
C:\>set /a WERT2=4335247.73856934
Fehlender Operator
C:\>echo 4335247
4335247
Das Echo will ich später auch in eine Datei schreiben.
Wieso fallen beim Echo die Nachkommastellen alle weg, wenn sie oben noch ausgegeben werden?
Gibt es eine möglichkeit diese im echo auch noch auszugeben?
Der Teil des Skripts sieht folgendermaßen aus:
FOR /F "usebackq delims=!" %%i IN (`sqlplus -S %USER2%/%PW2%@%DB-NAME2% @%SQL2%`) DO set /a WERT2=%%i
echo %WERT2%
Gruß
Hans
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 244558
Url: https://administrator.de/forum/kommastellen-in-batch-244558.html
Ausgedruckt am: 07.04.2025 um 20:04 Uhr
12 Kommentare
Neuester Kommentar
Hey
Also das Problem an Batch ist, dass es keine Funktion zur Berechnung von Komma-Werten besitzt. Daher werden bspw. bei Divisionen die Werte automatisch gerundet...
Da die Addition jedoch sehr simpel gestrickt ist, könntest du die jeweiligen Werte vor den Kommata sowie (jedoch in einer separaten Addition) die Werte nach den Kommata summieren und anschließend wieder zusammensetzen. Etwas aufwendig jedoch nicht schwierig ;)
Gruß, narthan
Zitat von @Hans87:
ich Frage 2 Datenbanken ab, die mir beide einen solchen wert zurückgeben... Gibt es bei Batch die Möglichkeit diese dann
zu addieren?
ich Frage 2 Datenbanken ab, die mir beide einen solchen wert zurückgeben... Gibt es bei Batch die Möglichkeit diese dann
zu addieren?
Also das Problem an Batch ist, dass es keine Funktion zur Berechnung von Komma-Werten besitzt. Daher werden bspw. bei Divisionen die Werte automatisch gerundet...
Da die Addition jedoch sehr simpel gestrickt ist, könntest du die jeweiligen Werte vor den Kommata sowie (jedoch in einer separaten Addition) die Werte nach den Kommata summieren und anschließend wieder zusammensetzen. Etwas aufwendig jedoch nicht schwierig ;)
Gruß, narthan
Zitat von @Hans87:
würde bedeuten ich muss die 2 Werte erst in 2 verschiedenen Dateien speichern, dann jeweils die teile bis zum komma einlesen
und addieren und dann die teile nach dem komma einlesen und addieren? und diese werte dann mit einem Komma getrennt wieder in eine
datei schreiben?
würde bedeuten ich muss die 2 Werte erst in 2 verschiedenen Dateien speichern, dann jeweils die teile bis zum komma einlesen
und addieren und dann die teile nach dem komma einlesen und addieren? und diese werte dann mit einem Komma getrennt wieder in eine
datei schreiben?
Also in extra Dateien musst du gar nichts schreiben, dafür gibt es ja die tolle Möglichkeit, genügend Variablen anzulegen
Und was ist wenn die nachkommastellen folgendermaßen aussehen: 0.564 und 0.541 dann würde die Zahl ja
größer werden, das ganze aber nicht zu der Zahl vor dem Komma addiert werden?
größer werden, das ganze aber nicht zu der Zahl vor dem Komma addiert werden?
Diesbzgl. würde ich bei der Addition nicht direkt die Werte vor dem Komma, sondern erst die hinteren Stellen betrachten (also hier 564 und 541). Wenn die Summe bspw. größer als 999 ist (hier: 1105) könntest du festlegen, dass die erste Stelle (hier: 1) in eine neue Variable gespeichert wird, die übrigen Stellen ergeben das Ergebnis des Nachkomma-Werts.
Die neue Variable bei der Berechnung der Vorkomma-Werte mit einer if-Abfrage berücksichtigen und alles zusammen addieren.
Gruß, narthan
@ AnkhMorpork
Ich würde zwar auch nicht unbedingt zu Batch raten, aber so wild ist das dann auch wieder nicht (zumindest, wenn es nicht mehr als 8 Dezimalstellen zu verarbeiten gibt):
Die (bei weniger als 8 Dezimalstellen in beiden Werten) am Ende angefügten Nullen sollten hoffentlich nicht weiter stören ...
Grüße
bastla
[Edit] Überzähliges "
Ich würde zwar auch nicht unbedingt zu Batch raten, aber so wild ist das dann auch wieder nicht (zumindest, wenn es nicht mehr als 8 Dezimalstellen zu verarbeiten gibt):
@echo off & setlocal
::Zeile 3 anpassen fuer die Ermittlung von WERT1 (ich habe beispielhaft %SQL1% verwendet)
FOR /F "usebackq delims=!" %%i IN (`sqlplus -S %USER2%/%PW2%@%DB-NAME2% @%SQL1%`) DO for /f "tokens=1-2 delims=." %%a in ("%%i") do set "WERT1_G=%%a" & set "WERT1_D=%%b00000000"
set "WERT1_D=%WERT1_D:~,8%"
FOR /F "usebackq delims=!" %%i IN (`sqlplus -S %USER2%/%PW2%@%DB-NAME2% @%SQL2%`) DO for /f "tokens=1-2 delims=." %%a in ("%%i") do set "WERT2_G=%%a" & set "WERT2_D=%%b00000000"
set "WERT2_D=%WERT2_D:~,8%"
set /a SUM_G=%WERT1_G%+%WERT2_G%
set /a SUM_D=1%WERT1_D%+1%WERT2_D%
set /a SUM_U=%SUM_D:~,1%-2
set /a SUM_G+=%SUM_U%
set "SUM=%SUM_G%.%SUM_D:~1%"
echo Summe:%SUM%
Grüße
bastla
[Edit] Überzähliges "
set
" in Zeile 3 entfernt [/Edit]
Hey bastla!
( @Hans87 bessere Hilfe bei Batch Problemen als von bastla kannst du hier gar nicht bekommen)
In der 3.Zeile ist ein set zu viel
Sonst ein top Code, hätte bei mir deutlich mehr Umfang gehabt (aufgrund zu wenig Know-how) 
( @Hans87 bessere Hilfe bei Batch Problemen als von bastla kannst du hier gar nicht bekommen)
In der 3.Zeile ist ein set zu viel
Zitat von @bastla:
@echo off & setlocal
::Zeile 3 anpassen fuer die Ermittlung von WERT1 (ich habe beispielhaft %SQL1% verwendet)
FOR /F "usebackq delims=!" %%i IN (`sqlplus -S %USER2%/%PW2%@%DB-NAME2% @%SQL1%`) DO for /f "tokens=1-2 delims=." %%a in ("%%i") do set set "WERT1_G=%%a" & set "WERT1_D=%%b00000000"
set "WERT1_D=%WERT1_D:~,8%"
Zitat von @bastla:
@ AnkhMorpork
Ich würde zwar auch nicht unbedingt zu Batch raten, aber so wild ist das dann auch wieder nicht (zumindest, wenn es nicht
mehr als 8 Dezimalstellen zu verarbeiten gibt):
@ AnkhMorpork
Ich würde zwar auch nicht unbedingt zu Batch raten, aber so wild ist das dann auch wieder nicht (zumindest, wenn es nicht
mehr als 8 Dezimalstellen zu verarbeiten gibt):
Naja, wenn DU da am Machen bist ...
Aber ich denke, bis zum Rentenalter könnte ich das mit Batch auch hinbekommen.
Gruß
ANKH
Hallo Hans87!
Mit zB
könntest Du aber solche führenden Nullen entfernen ...
Grüße
bastla
wen eine der Zahlen eine führende 0 hat, diese dann nicht addiert werden kann?
Wenn dann auch noch danach 8 oder 9 kommt - ja (wird in diesem Fall als - ungültige - Oktalzahl interpretiert); allerdings sollte das nur die Ganzzahlen betreffen (bei den Dezimalanteilen habe ich eigentlich vorgesorgt).Mit zB
:Loop
if "%WERT1_G%" neq "0" if "%WERT1_G:~,1%"=="0" set "WERT1_G=%WERT1_G:~1%" & goto :Loop
Grüße
bastla