[javascript] JavaScript : 소수점 이하 자릿수로 반올림하지만 추가 0은 제거

여기에 시나리오입니다 : 내가지고있어 .9999999999999999내가 점점되어야 할 때 1.0.
소수점 이하 자릿수를 잃어 버릴 여유가 있으므로 .toFixed(15)어떤 종류의 작업을 사용하고 있습니다.

반올림이 작동하지만 문제는 내가 주어진 것 1.000000000000000입니다.
소수 자릿수로 반올림하는 방법이 있지만 여분의 공백을 제거하는 방법이 있습니까?

참고 : .toPrecision내가 원하는 것이 아닙니다. 소수점 뒤에 몇 개의 숫자 만 지정하고 싶습니다.
참고 2 : .toPrecision(1)소수점 뒤에 실제로 데이터가있는 숫자에 대해 높은 정밀도를 유지해야하기 때문에 사용할 수 없습니다 . 이상적으로는 필요한만큼 소수점 이하 자릿수가 있습니다 (최대 15 개).



답변

>>> parseFloat(0.9999999.toFixed(4));
1
>>> parseFloat(0.0009999999.toFixed(4));
0.001
>>> parseFloat(0.0000009999999.toFixed(4));
0


답변

예, 방법이 있습니다. 사용 parseFloat().

parseFloat((1.005).toFixed(15)) //==> 1.005
parseFloat((1.000000000).toFixed(15)) //==> 1

여기에서 라이브 예제를 참조하십시오 : http://jsfiddle.net/nayish/7JBJw/


답변

내가 이해했듯이을 통해 얻은 문자열에서 후행 0을 제거하고 싶습니다 toFixed(). 이것은 순수한 문자열 연산입니다.

var x = 1.1230000;
var y = x.toFixed(15).replace(/0+$/, "");  // ==> 1.123


답변

Number(n.toFixed(15)) or +(n.toFixed(15)) 15 자리 십진수 문자열을 숫자로 변환하여 후행 0을 제거합니다.


답변

반환 값을 숫자로 캐스팅하면 후행 0이 삭제됩니다. 이것은 또한 현재보다 덜 장황 parseFloat()합니다.

+(4.55555).toFixed(2);
//-> 4.56

+(4).toFixed(2);
//-> 4

이것은 단항 + 연산자 를 사용하므로 이것을 문자열 연산의 일부로 사용하는 경우 앞에 +가 있어야합니다 : var n=0.9999999999999999; console.log('output ' + +n.toFixed(2));. 참고로 문자열 앞의 단항 +는 숫자로 변환합니다. MDN에서 : 단항 + 가능 :

정수 및 부동 소수점의 문자열 표현과 비 문자열 값 true, false 및 null을 변환합니다. 10 진수 및 16 진수 ( “0x”접두사) 형식의 정수가 지원됩니다. 음수가 지원됩니다 (16 진수는 아님). 특정 값을 구문 분석 할 수없는 경우 NaN으로 평가됩니다.


답변

예를 들어 5.00은 5, 5.10은 5.1이되는 질문 제목을 기반으로하여 제가 찾고 있던 것을 실제로 얻지 못했습니다. 내 솔루션은 다음과 같습니다.

num.toFixed(places).replace(/\.?0+$/, '')

'5.00'.replace(/\.?0+$/, '') // 5
'5.10'.replace(/\.?0+$/, '') // 5.1
'5.0000001'.replace(/\.?0+$/, '') // 5.0000001
'5.0001000'.replace(/\.?0+$/, '') // 5.0001

참고 : 정규식은 다음 경우에만 작동합니다. places > 0

PS https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed


답변

정밀도를 유지하고 0을 제거하는 더 나은 방법이 있습니다. 이것은 입력 번호를 취하고 일부 마술을 통해 후행 0을 제거합니다. 나는 당신이 명왕성에 인공위성을 두지 않는다면 꽤 좋은 정밀도 한계 인 16을 찾았습니다.

function convertToFixed(inputnum)
{

      var mynum = inputnum.toPrecision(16);
//If you have a string already ignore this first line and change mynum.toString to the inputnum

      var mynumstr = mynum.toString();
    return parseFloat(mynumstr);
    }
    alert(convertToFixed(6.6/6));