2011-12-01 2 views
2

나는 Script#으로 놀았으며 C# 번호가 Javascript로 변환 된 방법이 궁금합니다. 나는 코드Script # numbers가 Javascript에 얼마나 잘 맞습니까?

int a = 3/2; 

이 조금 쓰고 컴파일 된 자바 스크립트 관련 비트 보았다 : C#에서

var $0=3/2; 

int에 할당 3/2의 결과가 1이지만, 자바 스크립트에있는 숫자 유형이 하나만있는 경우 1.5입니다.

C# 및 JavaScript 동작 사이의 불일치로 인해 컴파일 된 코드가이를 보완하지 못하기 때문에 C#으로 작성된 숫자 계산이 Javascript로 컴파일 될 때 잘못 작동한다고 가정해야합니까?

답변

4

Javascript로 컴파일 할 때 C#으로 작성된 수치 계산이 잘못 동작한다고 가정해야합니까?

예. 당신이 말했듯이

, "컴파일 된 코드는 보상하지 않는 것"- 경우에 대해 당신이 aint로 선언 된 곳은 var $0 = Math.floor(3/2);를 사용하여 보상 할만큼 쉬울 것이다 언급하지만. 그러나 "컴파일러"가 어떻게 작동하는지 제어하지 않으면 피클에 빠지게됩니다. (자바 스크립트를 수동으로 수정할 수도 있지만 재생성 할 때마다 수행해야합니다.)

JavaScript가 소수 자리를 나타내는 방식으로 인해 십진수에도 문제가 발생할 수 있습니다 . 대부분의 사람들은 JavaScript가 0.4 * 3 works out to be 1.2000000000000002을 알려줄 것이라는 사실을 처음 알게되면 놀랐습니다. 자세한 내용은이 문제에 대한 다른 많은 질문 중 하나를 참조하십시오 (예 : How to deal with floating point number precision in JavaScript?). (사실 C#은 같은 방식으로 소수점을 처리한다고 생각하지만, 아마도이 문제는 놀랄 일이 아니지만 새로운 플레이어에게는 함정이 될 수 있습니다 ...)

+1

JavaScript의 모든 숫자는 C#에서 효과적으로 두 배가됩니다 int/float/long/decimal은 없습니다). 여기에는 언급 한대로 수학 연산자가 포함됩니다 (모든 연산자는 복식에서 효과적으로 수행됩니다). 둘 다 [IEEE754-binary64/FP64 (또는 "double")] (http://en.wikipedia.org/wiki/Double-precision_floating-point_format)에 따라 작동하도록 정의되어 있다고 생각합니다 (아키텍처 전반에 걸쳐 약간의 차이가 나타날 수 있음). 최후의 경우 : x86은 80 비트 내부 FPU를 가지고 있음을 고려하십시오). –

+0

@pst - 추가 정보를 제공해 주셔서 감사합니다. 나는 C#이 소수를 처리하는 방법을 기억하기 전에 마지막 단락을 타이핑하기 시작했다. 그러나 나는 JavaScript 프로그래머들이이 행동을 인식하지 못하기 때문에 대답에 남겨 둘 것이라고 생각했다. (따라서 최종적으로 괄호 안의 성명서). – nnnnnn

관련 문제