Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Kommastellen in Batch

Frage Entwicklung Batch & Shell

Mitglied: Hans87

Hans87 (Level 1) - Jetzt verbinden

24.07.2014, aktualisiert 11:09 Uhr, 1446 Aufrufe, 12 Kommentare

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:

01.
 
02.
FOR /F "usebackq delims=!" %%i IN (`sqlplus -S %USER2%/%PW2%@%DB-NAME2% @%SQL2%`) DO set /a WERT2=%%i 
03.
echo %WERT2% 
04.
 

Gruß

Hans
Mitglied: narthan
LÖSUNG 24.07.2014, aktualisiert um 11:09 Uhr
Moin Hans,

lass das "/a" beim set-Befehl mal weg und füg noch Anführungszeichen ein. Also:

01.
FOR /F "usebackq delims=!" %%i IN (`sqlplus -S %USER2%/%PW2%@%DB-NAME2% @%SQL2%`) DO set "WERT2=%%i" 
02.
echo %WERT2%
Grüße, narthan
Bitte warten ..
Mitglied: Hans87
24.07.2014 um 11:11 Uhr
Super, danke das Funktioniert schonmal...

jetzt noch eine weitere Frage:

ich Frage 2 Datenbanken ab, die mir beide einen solchen wert zurückgeben... Gibt es bei Batch die Möglichkeit diese dann zu addieren?
Bitte warten ..
Mitglied: narthan
24.07.2014 um 11:21 Uhr
Hey

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?

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
Bitte warten ..
Mitglied: Hans87
24.07.2014 um 11:28 Uhr
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?

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?


Gruß

Hans
Bitte warten ..
Mitglied: narthan
24.07.2014 um 11:44 Uhr
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?

Also in extra Dateien musst du gar nichts schreiben, dafür gibt es ja die tolle Möglichkeit, genügend Variablen anzulegen Wert vor dem Komma in eine Variable und Wert dahinter in eine neue. Und nach der Addition einfach eine echo-Zeile in der du die jeweiligen End-Variablen mit einem Komma dazwischen wieder zusammensetzt.


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?

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
Bitte warten ..
Mitglied: AnkhMorpork
24.07.2014 um 12:20 Uhr
Hallo,

nimm die Powershell - sonst sitzt du nächstes Jahr noch dran.

Gruß
ANKH
Bitte warten ..
Mitglied: bastla
LÖSUNG 24.07.2014, aktualisiert um 17:25 Uhr
@ 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):
01.
@echo off & setlocal 
02.
::Zeile 3 anpassen fuer die Ermittlung von WERT1 (ich habe beispielhaft %SQL1% verwendet) 
03.
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"  
04.
set "WERT1_D=%WERT1_D:~,8%" 
05.
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" 
06.
set "WERT2_D=%WERT2_D:~,8%" 
07.
set /a SUM_G=%WERT1_G%+%WERT2_G% 
08.
set /a SUM_D=1%WERT1_D%+1%WERT2_D% 
09.
set /a SUM_U=%SUM_D:~,1%-2 
10.
set /a SUM_G+=%SUM_U% 
11.
set "SUM=%SUM_G%.%SUM_D:~1%" 
12.
echo Summe:%SUM%
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 "set" in Zeile 3 entfernt [/Edit]
Bitte warten ..
Mitglied: narthan
24.07.2014, aktualisiert um 13:37 Uhr
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)

Zitat von bastla:
01.
@echo off & setlocal 
02.
::Zeile 3 anpassen fuer die Ermittlung von WERT1 (ich habe beispielhaft %SQL1% verwendet) 
03.
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"  
04.
set "WERT1_D=%WERT1_D:~,8%" 
Bitte warten ..
Mitglied: AnkhMorpork
24.07.2014 um 13:39 Uhr
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):

Naja, wenn DU da am Machen bist ...

Aber ich denke, bis zum Rentenalter könnte ich das mit Batch auch hinbekommen.

Gruß

ANKH
Bitte warten ..
Mitglied: Hans87
24.07.2014 um 14:25 Uhr
Hallo Bastla,

danke für deine Hilfe..

kann es sein dass wen eine der Zahlen eine führende 0 hat, diese dann nicht addiert werden kann?

Gruß

Hans
Bitte warten ..
Mitglied: bastla
24.07.2014, aktualisiert um 17:27 Uhr
Hallo Hans87!
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
01.
:Loop 
02.
if "%WERT1_G%" neq "0" if "%WERT1_G:~,1%"=="0" set "WERT1_G=%WERT1_G:~1%" & goto :Loop
könntest Du aber solche führenden Nullen entfernen ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
24.07.2014, aktualisiert um 17:27 Uhr
Hallo narthan!

Danke für's genaue Lesen und für die Freundlichkeit (auch an ANKH).

Ich korrigiere das oben noch.

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (9)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows Server
Mailserver auf Windows Server 2012 (8)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...

DSL, VDSL
DSL-Signal bewerten (8)

Frage von SarekHL zum Thema DSL, VDSL ...