티스토리 뷰

카테고리 없음

C#, Javascript에서의 Infinity

kr98gyeongim 2021. 11. 21. 18:16

Infinity란?

Infinity는 double이나 float로 0 나눗셈을 실시했을 경우에, 그 결과로써 취득된다.

즉, Javascript에서는 ∞(무한)이라는 의미이다.

[ JavaScript ]

콘솔에서 Javascript에서의 Infinity의 취급은 stringify()와 parse에 따라서 다르다.

JSON.stringify(Infinity) // => "null"
JSON.parse("Infinity") // => 에러발생

 

- stringify() 예제 1

> JSON.stringify(Infinity);
"null"
> JSON.stringify(Number.POSITIVE_INFINITY);
"null"
> JSON.stringify(Number.NEGATIVE_INFINITY);
"null"

보통 Infinity를 그대로 사용하는 프로그램을 짜는 일은 없겠지만,

JavaScript로 0 나눗셈을 실시했을 경우에 결과로서 들어오므로 주의가 필요하다.

 

- stringify() 예제 2

> 128 / 0;
Infinity

즉 어떠한 계산 결과를 오브젝트의 변수에 등록할 때에 Infinity를 고려하지 않고,

그대로 JSON 문자열로 변환하면 null로 출력된다.

 

- stringify() 예제 3

JSON.stringify({"result": 128 / 0});
> "{"result":null}"

 

- parse() 예제 

parse()는 크롬(chrome)브라우저의 console창에서 실행한 결과, 시스템 에러가 발생하는 것을 확인할 수 있다.

parse() 사용 캡쳐화면

 


[ C# ]

C#에서 0으로 나누었을 경우, Exception e로 시스템 에러가 발생할 거라고 생각했다.

하지만 결과값을 저장하는 변수의 데이터형이 int형이나 long 등의 경우에는 시스템 에러가 발생하지만,

double이나 float의 경우에는 시스템 에러가 발생하지않는다.

 

- 예제 1 - Infinity라는 문자열이 저장되는 경우

try
{
	double doubleResult = 2 / 0;
    float floatResult = 2 / 0;
}

catch (Exception e)
{
	throw e;
}

 

- 예제 1의 결과

doubleResult = "Infinity"
floatResult = "Infinity"

또한, Json.Parse()를 사용하여 확인해보면 

JSON 문자열에서 double, float으로 되돌린 경우도 정상적으로 Infinity로 해석되었다.

Json.Parse(`doubleResult`)
// 결과 -> "doubleResult:Infinity"
Json.Parse(`FloatResult`)
// 결과 ->"floatResult:Infinity"

 

- 예제 2 - 시스템 에러가 발생하는 경우(int)

try
{
	int intResult = 2 / 0;
}

catch (Exception e)
{
	throw e;
}

 

- 예제 3 - 시스템 에러가 발생하는 경우(long)

try
{
    long longResult = 2 / 0;
}

catch (Exception e)
{
	throw e;
}

 

실제 오늘 프로젝트에서 인원수, 평균 건수를 계산하는 수식에서 분모가 되는 변수가 0이었을 경우,

계산 결과가 Infinity로 저장되어 controller -> fetch에서 JavaScriptSerializer.Serialize(결과 데이터)를 할 때

Json.parse() 처리에서 에러가 발생하여 화면에 정상적으로 데이터가 출력되지 않았기 때문에 작성함.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함