Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: Hans87

Hans87 (Level 1) - Jetzt verbinden

24.07.2014, aktualisiert 11:09 Uhr, 1586 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 ..
Ähnliche Inhalte
Microsoft Office

Access 2010 Kommastelle wird falsch angezeigt

Frage von tdkcbundiMicrosoft Office

Hallo, ich habe das Problem, dass bei einem neu eingerichteten Windows 7 64bit Rechner das Access 2010 die Nachkommastelle ...

XML

Berechnete Zahlen in XSL in Euro oder mit 2 Kommastellen umwandeln

gelöst Frage von usenussiXML4 Kommentare

Hallo ich benötige noch einmal eure Hilfe. Ich habe folgendermaßen den Postversand ohne MwSt. berechnet. und bekomme aus 12,00 ...

Windows 7

Oracle Instant Client 11.2 Kommastellen in Access fehlen

Frage von QuantenfuxWindows 7

Hallo zusammen, ich habe ein paar Probleme in einer Accessdatenbank bei Kommastellen in Datensätze. Der Oracle Instant Client 11_2 ...

Batch & Shell

Batch: Batch in batch in cfg schreiben

gelöst Frage von pixelBfBatch & Shell2 Kommentare

Hayy, ich bin neu hier im forum:)) Meine frage: Kann ich eine batch schreiben die was in eine batch ...

Neue Wissensbeiträge
Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 11 StundenSicherheit

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 20 StundenInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 1 TagErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Windows 10

Windows 10 on ARM: von Microsoft entfernte Info - Klartext, was nicht geht

Information von kgborn vor 1 TagWindows 10

Windows 10 on ARM ist ja eine neue Variante, die Microsoft im Verbund mit Geräteherstellern am Markt etablieren will. ...

Heiß diskutierte Inhalte
Server
Route-Befehl Unterstützung (unter CMD)
gelöst Frage von FKRR56Server36 Kommentare

Guten Tag , i.M. habe ich Probleme über den CMD-Route-Befehl ein Routing auf einen entfernten Server zuzulassen. Der Server ...

Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1028 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgbornMicrosoft17 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

Webbrowser
Welcher Browser ist der Beste?
Frage von justtinWebbrowser15 Kommentare

Hallo Leute Ich habe eine interessante Frage. Mich wurde mal interessieren welcher Browser ist eure meinung nach der beste? ...