2016-06-12 2 views
0

나는이 프로젝트에서 일해 왔으며 이것을 발견했다. 근본적으로 정수 값을 여러 가지 십진수 (부동 소수점)로 곱하면받는 값이 정확하지 않습니다. 예를 들어 <%= 800 * 1.1 %> (html)은 단지 880 대신 880.0000000000001을 반환합니다.엘 릭셔/피닉스 증식

가능한 이유에 대한 설명이 있습니까? 숫자를 반올림 할 수 있습니까?

편집 : <%= 800 + (800 * 0.1) %> 아래의 회신을 사용

잘, 나는 <%= Float.round(value, 2) %>에 코드를 수정 한 작품, 그래서 값이 플로트를 사용 라운드 소수점 두 자리

+1

_ "이유에 대한 가능한 설명"_ _ [모든 컴퓨터 과학자가 부동 소수점 연산에 대해 알아야 할 사항] (https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg .html). – CodeCaster

답변

3

로 반올림됩니다 round()

<%= 800 * 1.1 |> round %> 
+0

감사! – Ilya

+0

전에이 문제가 발생하지 않았습니다. 안녕하세요, 제가 그것에 대해 더 많이 읽을 수있는 곳을 알고 계십니까? 조금 더 복잡한 동작 인 쉼표 – Ilya

+1

다음에 자릿수를 지정하는 데 관심이 있습니다. 여기서는 Float 모듈에서 답변을 찾을 수 있습니다. - http://elixir-lang.org/docs/stable/elixir/Float.html – coderVishal