Powershell - числовой формат показывает неверный результат - PullRequest
1 голос
/ 28 декабря 2011

в powershell v2, мне нужно разделить 22 на 8, а затем убрать все десятичные знаки после десятичной точки (которая в моей системе запятая ). Нет округления.

Как видите. 22/8 равняется 2,75

PS C:\Documents and Settings\Administrator> $(22/8)
2,75

Ожидаемый результат: 2 .

Странно, я получаю разные результаты, когда использую разные способы для расчета одного и того же.

PS C:\Documents and Settings\Administrator> "{0:N0}" -f $(22/8)
3

PS C:\Documents and Settings\Administrator> "{0:N0}" -f 2.75
3

PS C:\Documents and Settings\Administrator> "{0:N0}" -f 2,75
2

Некоторые другие примеры ...

PS C:\Documents and Settings\Administrator> "{0:N0}" -f 2.15
2

PS C:\Documents and Settings\Administrator> "{0:N0}" -f 2,15
2

В чем причина?

Ответы [ 4 ]

3 голосов
/ 28 декабря 2011

Чтобы удалить все знаки после запятой после десятичной точки, вы должны использовать метод усечения математического класса.

[Math]::Truncate(22/8) # result: 2
[Math]::Truncate(-22/8) # result: -2

Это даст желаемый результат как для положительных, так и для отрицательных чисел.*

1 голос
/ 28 декабря 2011

Будет ли это работать для вас?

[math]::Floor(22/8)

Результат: 2

1 голос
/ 28 декабря 2011

Запятая (по крайней мере, в системах на английском языке США) используется Powershell в качестве разделителя.Если это так на вашей машине, «2,75» читается как «2» и «75».Строка формата заботится только о «2», поэтому она игнорирует «75», которую рассматривает как второй аргумент.

2,15 округляет, а 2,75 округляет.Почему вы ожидаете, что «2,75» округляется до «2»?Если это то, что вам действительно нужно, попробуйте метод Math.Floor () .

0 голосов
/ 28 декабря 2011

Математические методы более предпочтительны, но вы также можете прибегнуть к манипуляции со строками:

PS> (22/8).ToString().Split('.')[0]
2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...