验证PowerShell中的十进制格式



我在平面文件中有一个十进制值,我想验证十进制值是否decimal(18,2)

我已经将文件内容存储在变量中,并且可以回显列。

我的代码是:

$EntryList=Import-Csv -Delimiter "|" -Header @(
"RECORD_TYPE", 
"COD_FIN_INSTRUMENT_ATTRIBUTE",
"COD_SEGM_REG",
"IMP_CCF_RWA") -Path $datarecordnum

我假设你的意思是你想验证一个给定的数字可以用SQL Server的DECIMAL(18,2)格式表示。

我会尝试将值转换为 C# 的SqlDecimal数据类型,该数据类型旨在表示 SQL Server 的DECIMAL数据类型。 然后尝试强制该值为给定的小数位数和精度,并验证该值是否与原始值匹配。

下面是一个示例函数:

function Test-DecimalFormat {
param(
[Parameter(Mandatory = $true, Position = 0)]
$Value,
[Parameter(Mandatory = $true, Position = 1)]
[int]
$Precision,
[Parameter(Mandatory = $true, Position = 2)]
[int]
$Scale
)
try {
$DecimalValue = [System.Convert]::ToDecimal($Value);
$SqlDecimalValue = [System.Data.SqlTypes.SqlDecimal]::new($DecimalValue);
return ([System.Data.SqlTypes.SqlDecimal]::ConvertToPrecScale($SqlDecimalValue, $Precision, $Scale).Value -eq $DecimalValue);
}
catch {
return $false;
}
}

例子:

PS C:> Test-DecimalFormat -Value 123456789123456789.78 -Precision 18 -Scale 2
False
PS C:> Test-DecimalFormat -Value 789.78 -Precision 18 -Scale 2
True
PS C:> Test-DecimalFormat -Value 789.78901 -Precision 18 -Scale 2
False
PS C:> Test-DecimalFormat -Value ([decimal]::MaxValue) -Precision 18 -Scale 2
False
PS C:> Test-DecimalFormat -Value ([decimal]::MaxValue) -Precision 38 -Scale 0
True

请注意,此函数对于非常大的精度并不完美,因为NUMERIC()SQL 数据类型的最大值为 10^38 - 1,而System.Decimal的最大值为 2^96。 如果您需要超出System.Decimal范围的精确值,则可能必须比较值的二进制表示。 请参阅此答案了解更多信息。

相关内容

  • 没有找到相关文章

最新更新