我假設你的意思是你要驗證一個給定的數量可以通過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。
你正在尋找這個十進制值在哪裏?你正在驗證格式或內容? – TheIncorrigible1
我正在驗證格式 –
您應該澄清您要查找的內容。沒有關於數據看起來像什麼或你想要什麼的線索。 – TheIncorrigible1