【问题标题】:validating decimal format in powershell [closed]在powershell中验证十进制格式[关闭]
【发布时间】:2017-09-13 14:55:09
【问题描述】:

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

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

我的代码是:

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

【问题讨论】:

  • 您要查找的十进制值在哪里?您是否在验证格式或内容?
  • 我正在验证格式
  • 你应该澄清你在寻找什么。没有关于数据是什么样子或您想要什么的线索。
  • 好的,让我给你一个数据样本并回复你

标签: powershell powershell-2.0


【解决方案1】:

我假设您的意思是要验证给定数字是否可以用 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 范围之外的精确值,您可能需要比较这些值的二进制表示。请参阅this answer 了解更多信息。

【讨论】:

  • Test-DecimalFormat -Value '999999999999999999999999999999999999999999999999999999999999999999999999' -Precision 38 -Scale 0 bug....
  • @Esperento57 当然,已修复。
猜你喜欢
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
相关资源
最近更新 更多