2010-08-16 10 views
2

ASP.NET MVC에 송장 페이지가 있습니다.자바 스크립트 반올림 v 반올림

나는 GST를 계산 중입니다.

이 결과는 자바 스크립트입니다. C#에서

165.45 * 0.1 = 16.544999999999998 

내가 얻을

165.45 * 0.1 = 16.545 

이 라운드 다르게

내가 소수점 이하 2 자리까지 모두 둥글게 원하지만 그들이

자바 스크립트를 = 다른 대답

에게 16.54

을 제공 C# = 16.55 내가 원하는 것은 무엇인가.

아이디어를 얻는 방법은 무엇입니까 ??

+0

포스트 백 C# 계산 값? – devnull

답변

1

브라우저가 다르게 작동하는 다른 JS 엔진을 사용하기 때문에 Javascript에서 숫자를 반올림하는 일관된 방법이 없을 수도 있습니다.

그렇다면 서버 측에서 업무상 중요한 계산을 수행해야합니다.
절대, 절대 신뢰 클라이언트 입력.

3

double을 사용하는 경우 이 아니며은 실제로 16.55가 아닙니다. 실제로 인쇄 될 수도 있지만 실제 값은 아닙니다. 두 경우 모두 이진 기반 형식 대신 십진 기반 형식을 사용해야합니다. C#에서는 쉽습니다. decimal (일명 System.Decimal) 유형을 사용할 수 있습니다. 불행히도 자바 스크립트에 상응하는 것이 있는지 모르겠습니다.

이것이 중요한 이유를 이해하려면 과 decimal floating point을 읽어야합니다. .NET 중심의 기사이지만 원칙이 JS에도 적용됩니다.

통화 가치의 경우이 문제를 피하는 한 가지 방법은 정수를 사용하여 시작하는 것입니다. 즉, 동전의 수 (센트, 무엇이든) 값을 입력 한 다음 필요에 따라 다른 소수점 구분 기호를 사용하여 (number/100) + "." + (number % 100)을 작성하여 표시하십시오. 이 특정 상황에 대해 일관되고 예측 가능한 결과를 얻는 가장 좋은 방법을 찾을 수 있을지 의심됩니다.

+0

JavaScript에는 '십진수'와 동일한 기능이 없습니다. 모든 자바 스크립트 숫자는 IEEE-754 배후의 배후에 있습니다. – LukeH

+0

@LukeH : Java의 BigDecimal과 같은 것을 제공하는 써드 파티 라이브러리가 있습니까? –

+0

JavaScript에 대한 BigDecimal이 있습니다. 이는 자바 버전의 직접 포트에서 시도한 것입니다. 나는 그것이 좋은지 아닌지 전혀 모른다. http://freshmeat.net/projects/js_bigdecimal – LukeH