예이 부정적인 번호를이 반대 방식으로 작동합니다.
예 (모노의 C#을 대화 형 쉘 csharp
사용) :
csharp> Math.Floor(-12.0d)
-12
csharp> Math.Floor(-12.5d)
-13
csharp> (int) -12.5
-12
(자바/C#을 모두 동일) 및 어쨌든 대부분의 언어를 생각한다.
캐스팅 부동 소수점 숫자를 정수로 변환하는 것은 정수 부분을 유지하는 소수 부분을 버림으로써 수행됩니다. -12.5
의 정수 부분은 12
입니다. 따라서 음수는 int
으로 변환하면 Math.Ceil
이됩니다. @Matthew 주장 또한 같은
하는
float
또는
double
은
1.023e23
(
아보가드로 정수) 같은 수치에 도달 할 수있다. 단순히
mantisse이 쉼표 뒤에 더 이상 숫자를 나타낼 수 없기 때문입니다.
의 숫자는이며 정수로 간주되지만
int
으로 표시 할 수 없습니다.
Math.floor
작업을 수행하면 아무 일도 일어나지 않지만 값은 계속 유지됩니다.
예 :
csharp> double ac = 1.023e23;
csharp> Math.Floor(ac);
1.023E+23
csharp> (int) ac;
0
주 : int
로 변환 오버 플로우이 발생할 수 있지만이 지금까지 가져온 보일 수도 있지만, 그럼에도 불구하고 의미에서 명확한 차이가 이렇게있다. 어쨌든 오류로 이어지는 경향이있는 차이.
또한, works differently에 대한 무한 번호와 NaN :
System.out.println(Math.floor(Double.POSITIVE_INFINITY)); // Prints Infinity
System.out.println((int)Double.POSITIVE_INFINITY); // Prints 2147483647
System.out.println(Math.floor(Double.NaN)); // Prints NaN
System.out.println((int)Double.NaN); // Prints 0
하지만 항상 그럼에도 불구하고 그들을 사용할 수 있습니다. 주조는 일을 더 읽을 수 없도록 만듭니다. 라운딩 업/다운/오프는 캐스트의 더 부작용 (부작용)입니다. Math.Ceil/Floor/Round
을 사용하면 무엇을 의미하는지 명확히 알 수 있습니다.
때때로 float/ceil 연산을 수행하는 것보다 정수로 변환하는 것이 훨씬 효율적입니다. 그러나 똑똑한 컴파일러는 변수가 항상 양수를 저장하므로 최적화 될 수 있음을 알 수 있습니다. 또한 대부분의 응용 프로그램에서는 성능상의 불이익을 거의 미치지 않습니다.
자바는 모든 플로트에'.0'을 출력합니다. –
당신은 system.out의 출력을 기반으로'java it가 유지된다 '는 가정을하고 있습니까? –
'Math.Floor'는 소수 부분없이 double을 반환합니다. 그것은 정수로 캐스팅하는 것과 같지 않습니다. –