使用PowerShell划分两位小数

时间:2015-11-06 15:37:53

标签: powershell

这看似简单,但经过搜索,我空手而归。

如何在powershell中划分两位小数?

204.50 / 1,917.75

引发以下错误:

Method invocation failed because [System.Object[]] does not contain a method named 'op_Division'.
At line:1 char:1
+ 204.50 / 1,917.75
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Division:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

2 个答案:

答案 0 :(得分:3)

尝试退出逗号。你键入的内容看起来像204.50除以1然后是917.75

答案 1 :(得分:0)

Walter Mitty's answer是一种有效的解决方案。

解释原因 204.50 / 1,917.75失败:

PowerShell数字文字(a)始终使用.作为小数点,与当前文化无关,并且(b)执行< em> not 支持使用千位分隔符(例如,)。

这意味着1,917.75 未被识别为数字文字,这引出了问题(kinda):如何解析

,是PowerShell中的 array-construction 运算符:也就是说,由,分隔的标记构成了数组元素。< / p>

因此,1,917.75相当于@( 1, 917.75 ):包含[int] 1[double] 2元素数组 917.75

,的优先级高于除/ 之前的除法运算符,因此204.50 / 1,917.75相当于:

 204.50 / @( 1, 917.75 )

也就是说,PowerShell 尝试[double]文字204.50除以数组 @( 1, 917.75 )

由于PowerShell不知道如何通过数组(在PowerShell中一般表示为[System.Object[]])来划分任何,因此会出现以下错误消息:

Method invocation failed because [System.Object[]] does not contain a method named 'op_Division'.

也就是说,PowerShell寻找一种将除法运算符/op_Division)应用于数组操作数的方法,因为没有定义,所以错误发生。

暂且不说: PowerShell 重载某些运算符以使用数组,但仅当数组位于 LHS (左侧操作数)。

运营商-eq / ne-like / -notlike-match / -notmatch(请告诉我,如果我是&#39; m缺少任何一个)接受一个数组作为LHS,一个标量作为RHS,在这种情况下,运算符充当过滤器

运算符单独应用到LHS的元素(与RHS上的标量相对应),以及操作返回的元素子集{{1返回为输入数组的子数组; e.g:

$true

输出@( 'donald trump', 'hillary clinton', 'gary johnson' ) -notmatch 'trump' ,输入的子数组只包含那些不包含子串@( 'hillary clinton', 'gary johnson' )的元素。