在Powershell中操纵大数字

时间:2016-07-30 13:35:40

标签: powershell

我开发了一个小脚本来模拟Powershell中的Syracuse猜想。

我使用的是非常大的数字,我正在Excel图表中研究结果,但是当它们太大时,powershell会不断格式化我的数字:

这是我第一次尝试的结果

1.60827282342995E+40 
8.04136411714975E+39 
4.02068205857487E+39 
2.01034102928744E+39 
1.00517051464372E+39 
5.02585257321859E+38 

我希望得到没有格式化“E + XX”的结果,有没有办法记录整个数字来分析它的构成?

编辑:我写的脚本:

Remove-Item "E:\syracuse.txt"

$Logfile = "E:\syracuse.txt"
Function LogWrite
{
Param ([string]$logstring)

Add-content $Logfile -value $logstring
}

$chiffre1 = 0
$chiffre2 = 0


$chiffre1 = read-host "chiffre"

write-host Sequence Initiale $chiffre1

$val = 0

while ($val -ne 32132135464664546546545645656454665412321321231321654657987465432132154)

{


$val++

if ([bool]!($chiffre1%2))

{
   Write-Host "Pair"
   $chiffre2=($chiffre1)/2 
   write-host $chiffre2
   LogWrite $chiffre2,$val

}
Else
{
   Write-Host "Impair"
   $chiffre2 = $chiffre1*3+1
   write-host $chiffre2
   LogWrite $chiffre2,$val

}

if ([bool]!($chiffre2%2))

{
   Write-Host "Pair"
   $chiffre1=($chiffre2)/2 
   write-host $chiffre1
   LogWrite $chiffre1,$val
}
Else
{
   Write-Host "Impair"
   $chiffre1 = $chiffre2*3+1
   write-host $chiffre1
   LogWrite $chiffre1,$val

}

}

$ val具有任意值

我只有Powershell 2.0,我现在正在更新到Powershell v3。

Edit2:现在非常奇怪。 在ISE中,脚本不起作用,每次都是奇数。

我想我在bigInt的帮助下找到了一个小解决方案 由于某些原因,它不适用于ISE,但它适用于Powershell v3 cmd。

我修改了我的LogWrite行:

LogWrite ([bigint]$chiffre1),$val

LogWrite ([bigint]$chiffre2),$val

我的日志现在格式正确!

1 个答案:

答案 0 :(得分:4)

在PowerShell 3.0+中,您可以使用System.Numerics.BigInteger data type来表示任意大的整数值:

PS C:\> 1e15
1E+15
PS C:\> 1e15 -as [System.Numerics.BigInteger]
1000000000000000

甚至还有一个内置式加速器([bigint]):

PS C:\> [bigint]1e15
1000000000000000