我正在编写代码,其中一部分要求用户输入一个数字,我必须检查该数字是否为小数。如果数字是小数而不是输出必须说"这是一个十进制数"如果数字不是小数而不是输出,则说明"这不是十进制数"。有没有办法做到这一点?
答案 0 :(得分:1)
由于现在猫不在包里,你可以尝试将值转换为[decimal]
。如果成功返回$true
function IsDecimal($value){
Try{
[decimal]$value | Out-Null
$true
} Catch {
$false
}
}
IsDecimal "10"
IsDecimal "1.2"
IsDecimal "bagels"
True
True
False
因此,如果需要,您可以在代码的其他部分使用它
If(IsDecimal $string){Write-Host "Stuff"}
您可以从此question了解有关投射的更多信息。这里有很多好的答案,不需要重复。
在这方面
If($value -as [decimal]){Write-Host "Valid decimal"}else{Write-Host "Not valid decimal"}
答案 1 :(得分:0)
我相信如果你试图从命令行传递数字然后检查那么它看起来就像下面那样。
PS C:\> .\Untitled1.ps1 123
Does not contains '.'
PS C:\> .\Untitled1.ps1 123.24
Contains '.'
Untitled1.ps1
============
if ($args[0].GetType() -eq [System.Double])
{
Write-Host "Contains '.'";
}
else
{
Write-Host "Does not contains '.'";
}

答案 2 :(得分:0)
您的问题可以通过两种方式起作用。您正在寻找确定数字是小数。要么是类型,要么是数字有小数。
让我们使用变量$Sum
,$ Sum保留值2.5
如果您想知道类型,可以输入:
$sum.GetType().Name
如果您要输入真假,则可以输入:
if (($sum - ($sum -as [int])) -ne 0) {"$false"}Else {$True}
您看到,通过将$ Sum强制转换为[int],它将自动舍入(在这种情况下为2)。因此,通过从$ Sum中提取($ Sum -as [int]),您将最终得到2.5-2 = 0.5的结果,这意味着该总和必须是除四舍五入以外的任何数字。