2017-05-12 4 views
0

In einer Textdatei voller Zahlen, die durch Leerzeichen getrennt sind und jede einzelne Dezimalstellen (ganze ganze Zahlen, zB nicht nur "50" sondern "50.000000"), kann Powershell zum Runden aller Zahlen auf die nächste ganze Zahl verwendet werden? Sie sind nur von weniger als 1 abgesetzt, also buchstäblich nur auf die nächste ganze Zahl gerundet.Außerdem möchte ich auch Nullen beibehalten/nicht abschneiden, so dass "-2499.999756" zu "-2500.000000" wird Es sind nicht nur negative Zahlen.Powershell - Wie man Zahlen abrundet und dabei die Nachkommastellen behält?

ich diese Website nur selten verwenden, so meine aufrichtigste Entschuldigung, wenn etwas über diese Frage falsche Etikette ist.

Granted, there's no guarantee this will accomplish what I want to do but I still want to try to remove irregularities in a 3D model I made.

Antwort

2

Sie können den Namespace [math] verwenden, um auf mathematische Funktionen zuzugreifen.

Hier nutzen wir die Round Funktion eine Zahl runden

[math]::Round("-2499.999756") # returns -2500 

Dann können wir die Zahl mit 6 Dezimalstellen formatieren Sie die ToString Methode:

[math]::Round("-2499.999756").ToString("#.000000") # returns -2500.000000 
0

Wenn die Datei eine Kopfzeile hat Sie müssen den Parameter -Header entfernen und die Spaltennamen wie folgt ändern $Row.

$InFile = '.\Dungeon_Q.obj' 
$CSV = Import-Csv $InFile -Delimiter ' ' -Header C1,C2,C3,C4 
ForEach ($Row in $CSV){ 
    "{0} {1:N6} {2:N6} {3:N6}" -f $Row.C1,[math]::floor($Row.C2),[math]::floor($Row.C3),[math]::floor($Row.C4) 
} 

Beispiel für eine Ausgabe der ersten vier Zeilen:

v 200,000000 -2.200,000000 200,000000 
v 400,000000 -2.200,000000 200,000000 
v 500,000000 -2.200,000000 200,000000 
v -500,000000 -2.100,000000 200,000000 
Verwandte Themen