programing

파워셸 - 가장 가까운 정수로 반올림

css3 2023. 8. 8. 21:47

파워셸 - 가장 가까운 정수로 반올림

PowerShell에서 가장 가까운 정수로 반올림하는 가장 좋은 방법은 무엇입니까?

난 노력하고 있다.[math]::truncate하지만 그것은 나에게 예측 가능한 결과를 주지 않습니다.

예:

$bla = 17.2/0.1
[math]::truncate($bla) 

예상되는 172 대신 171을 출력합니다!

$bla = 172
[math]::truncate($bla) 

출력 172

나는 단지 효과가 있고 항상 둥글게 만들어야 하는 것이 필요합니다.round($myNum + 0.5)숫자가 0.5 성분일 경우 반올림될 수 있는 베이커의 반올림으로 인해 작동하지 않습니다.)

아, 그렇군요.데이터 유형은 10진수여야 합니다.

[decimal] $de = 17.2/.1
[double] $db = 17.2/.1

[math]::floor($de)
172
[math]::floor($db)
171

http://msdn.microsoft.com/en-us/library/system.math.floor(v=vs.85).aspx

수학:바닥 함수와 [십진수] 선언을 결합하면 원하는 결과를 얻을 수 있습니다.

[수학]:: 바닥([소수](17.27975/0.1))

반환 = 172

원본과 관련하여 발생하는 문제17.2/0.1나눗셈 예제는 주어진 소수점 값의 부동 소수점 표현의 부정확성 때문입니다(다른 답변에 대한 조이의 설명에서 언급됨).PowerShell에서 최종 값의 왕복 표현을 조사하면 이를 확인할 수 있습니다.

PS> $bla = 17.2/0.1
PS> $bla.GetType().FullName
System.Double
PS> $bla.ToString()
172
PS> $bla.ToString('r')
171.99999999999997

이 문제를 해결하는 간단한 방법은 결과를 다음과 같이 선언하는 것입니다.intPowerShell은 자동으로 결과를 가장 가까운 정수 값으로 반올림합니다.

PS> [int]$bli = 17.2/0.1
PS> $bli.GetType().FullName
System.Int32
PS> $bli.ToString()
172

기본값을 사용합니다.중간점 반올림의 NET 방법입니다.ToEven(은행가 라운딩이라고도 함).이것은 많은 숫자 값을 표로 만들 때 좋은 통계적 특성을 가지지만, 더 간단한 0에서 벗어나는 방법으로 변경할 수도 있습니다.

function round( $value, [MidpointRounding]$mode = 'AwayFromZero' ) {
  [Math]::Round( $value, $mode )
}

PS> [int]3.5
4
PS> [int]4.5
4
PS> round 3.5
4
PS> round 4.5
5

다른 옵션은 원래 값에 대해 보다 정확한 표현을 사용하여 문제를 완전히 방지하는 것입니다.

PS> $bld = [decimal]17.2/0.1
PS> $bld.GetType().FullName
System.Decimal
PS> $bld.ToString()
172

[Math]::floor($x)기본적으로 제공되는 방법입니다.

음의 숫자로 어떻게 행동할지만 알아두세요.[Math]::floor(5.5)돌아온다5,그렇지만[Math]::floor(-5.5)돌아온다-6.

0에 가까운 값을 반환하는 기능이 필요한 경우 다음이 필요합니다.

If ($x -ge 0) {
    [Math]::Floor($x)
} Else {
    [Math]::Ceiling($x)
}

언급URL : https://stackoverflow.com/questions/5863772/powershell-round-down-to-nearest-whole-number