0

文字配列と同様に、数値を数字の配列に変換し、配列に対して数学演算を実行できる方法を見つけようとしています。

私が最初に考えたのは、数値を文字列に変換してから文字配列に変換し、その配列を Int32 型に戻すことでした。ただし、これにはいくつかの予期しない結果があります。たとえば[int[]](1024).ToString().ToCharArray()、次の配列になります。

49
48
50
52

ここで何が起こっているのかわかりました.PowerShellは数字をASCII文字として扱い、それらを数値に変換しています. しかし、それは私の問題を解決するのに役立ちません。

数値を1桁の整数配列に変換する「正しい方法」は何ですか?

4

2 に答える 2

4

これを試して:

[char[]]'1024' | %{$_ - 48}

これにより、文字が正しい値の int に変換されます。

C:\PS> [char[]]'1024' | %{$_ - 48} | %{$_.GetType().Name}
Int32
Int32
Int32
Int32

これは、int で動作する「数学的な」バージョンです。

C:\PS> $number = 1024
C:\PS> $numDigits = [math]::Floor([math]::Log10($number)) + 1
C:\PS> $res = @()
C:\PS> for ($i = 0; $i -lt $numDigits; $i++) {$res += $number % 10; $number = [Math]::Floor($number / 10)}
C:\PS> $res[($res.count-1)..0]
1
0
2
4
于 2013-11-13T20:46:02.343 に答える
2

わかった。

[int[]][string[]][char[]]'1024'
([int[]][string[]][char[]]'1024').gettype()
1
0
2
4

IsPublic IsSerial Name                                     BaseType                   
-------- -------- ----                                     --------                   
True     True     Int32[]                                  System.Array               

1024 から始めて、[char[]] にキャストして数字を区切ります。次に、文字を文字列にキャストして、ASCII コードではなく int 変換リテラル テキストを作成します。

[int] で始まり、キャストを最小化する別のタック:

$n = 1024
$array = [int[]](($n -split '') -ne '')

$array
$array.GetType()


1
0
2
4

IsPublic IsSerial Name                                     BaseType                   
-------- -------- ----                                     --------                   
True     True     Int32[]                                  System.Array               
于 2013-11-13T20:50:54.207 に答える