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으로 평가됩니다.
Mmmm, 크로스 브라우저에도 약간 다른 대답이 있습니다.
function round(x, n) {
return Math.round(x * Math.pow(10, n)) / Math.pow(10, n)
}
예를 들어 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));
'Program Tip' 카테고리의 다른 글
C #에서 익명 유형을 키 / 값 배열로 변환합니까? (0) | 2020.10.20 |
---|---|
mysql 인덱스가 너무 많습니까? (0) | 2020.10.20 |
서비스 데이터 변경시 범위 값 업데이트 (0) | 2020.10.20 |
각도 재질 : 매트 선택 기본값을 선택하지 않음 (0) | 2020.10.20 |
get / set 패턴 (Python에서)을 사용합니까? (0) | 2020.10.20 |