gpt4 book ai didi

.net - [math]::round 的相同输入返回不同的结果

转载 作者:行者123 更新时间:2023-12-05 01:35:04 24 4
gpt4 key购买 nike

我正在 PowerShell 中解析文件。我有这一段代码(带有调试写入)

$max_file_size = 0
$max_file_size = $value
Write-Host $max_file_size # DEBUG
$max_file_size = Convert-to-Bytes $max_file_size
Write-Host $max_file_size # DEBUG
[string]$max_file_size = [math]::round($max_file_size, 0)
Write-Host $max_file_size # DEBUG

我看到两条不同的线具有相同的数据。第一遍返回此结果:

8192.00000P
9223372036854775808.00000
9223372036854775808

第二遍返回此结果:

8192.00000P
9223372036854775808.00000
9.22337203685478E+18

哇?

Function Convert-to-Bytes
{
#Pass in a value and convert to bytes.
param ($value)

If ($value -eq $Null)
{
$value = 0
}

#Convert case to upper.
[string]$value = $value.ToString().ToUpper()

#Strip off 'B' if in string.
[string]$value = $value.TrimEnd("B")

[decimal]$output = 0

If ($value.Contains("K"))
{
$value = $value.TrimEnd("K")
[decimal]$output = $value
[decimal]$output = $output * 1KB
}
If ($value.Contains("M"))
{
$value = $value.TrimEnd("M")
[decimal]$output = $value
[decimal]$output = $output * 1MB
}
If ($value.Contains("G"))
{
$value = $value.TrimEnd("G")
[decimal]$output = $value
[decimal]$output = $output * 1GB
}
If ($value.Contains("T"))
{
$value = $value.TrimEnd("T")
[decimal]$output = $value
[decimal]$output = $output * 1TB
}
If ($value.Contains("P"))
{
$value = $value.TrimEnd("P")
[decimal]$output = $value
[decimal]$output = $output * 1PB
}
If ($value.Contains("yte"))
{
$value = $value.TrimEnd("yte")
[decimal]$output = $value
[decimal]$output = $output
}
Return $output
}

最佳答案

当您声明类型化变量时,PowerShell 会向其添加 ArgumentTypeConverterAttribute,因此对该变量的所有后续赋值都将转换为该类型。

PS> $Var1=$null
PS> [string]$Var2=$null
PS> Get-Variable Var?|ft Name,Attributes -AutoSize

Name Attributes
---- ----------
Var1 {}
Var2 {System.Management.Automation.ArgumentTypeConverterAttribute}


PS> $Var1=1
PS> $Var2=1
PS> $Var1.GetType().FullName
System.Int32
PS> $Var2.GetType().FullName
System.String

在第一遍结束时,您将 max_file_size 声明为 string:

[string]$max_file_size = [math]::round($max_file_size, 0)

因此在第二次传递时,您分配给它的任何内容都已转换为 string

关于.net - [math]::round 的相同输入返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27830659/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com