JavaScript에서 부동 소수점을 문자열로 변환 할 때 소수점 이하 두 자리 만 얻는 방법은 무엇입니까? 예를 들어 0.3445434 대신 0.34입니다.
답변
var result = Math.round(original*100)/100;
코드가 자명하지 않은 경우 의 specifics .
편집 : … 또는 Tim Büthe가toFixed
제안한대로 사용 하십시오 . 그 하나를 잊어 버렸습니다. 알려 줘서 고마워요.
답변
숫자를 반올림하는 기능이 있습니다. 예를 들면 다음과 같습니다.
var x = 5.0364342423;
print(x.toFixed(2));
5.04를 인쇄합니다.
편집 :
바이올린
답변
다음을 사용할 때주의하십시오 toFixed()
:
첫째, 숫자의 반올림은 숫자의 이진 표현을 사용하여 이루어 지므로 예기치 않은 동작이 발생할 수 있습니다. 예를 들어
(0.595).toFixed(2) === '0.59'
대신에 '0.6'
.
둘째,에 IE 버그가 toFixed()
있습니다. IE (적어도 버전 7까지는 IE8을 확인하지 않음)에서 다음 사항이 적용됩니다.
(0.9).toFixed(0) === '0'
kkyy의 제안을 따르거나 사용자 정의 toFixed()
기능 을 사용하는 것이 좋습니다.
function toFixed(value, precision) {
var power = Math.pow(10, precision || 0);
return String(Math.round(value * power) / power);
}
답변
알아야 할 또 하나의 문제 toFixed()
는 숫자 끝에 불필요한 0을 생성 할 수 있다는 것입니다 . 예를 들면 다음과 같습니다.
var x=(23-7.37)
x
15.629999999999999
x.toFixed(6)
"15.630000"
아이디어는 다음을 사용하여 출력을 정리하는 것입니다 RegExp
.
function humanize(x){
return x.toFixed(6).replace(/\.?0*$/,'');
}
이 RegExp
정수는 후행 0 (및 선택적으로 소수점)과 일치하여 정수에도 좋습니다.
humanize(23-7.37)
"15.63"
humanize(1200)
"1200"
humanize(1200.03)
"1200.03"
humanize(3/4)
"0.75"
humanize(4/3)
"1.333333"
답변
var x = 0.3445434
x = Math.round (x*100) / 100 // this will make nice rounding
답변
승수를 사용하여 떠 다니는 모든 솔루션에 문제가 있습니다. kkyy와 Christoph의 솔루션은 모두 불행히도 잘못되었습니다.
번호 코드를 테스트하십시오 551.175 2 소수 자릿수가 – 그것은 반올림됩니다 551.17 그것이 있어야하는 동안 551.18을 ! 그러나 당신이 전을 테스트한다면. 451.175 괜찮습니다-451.18. 따라서이 오류를 한 눈에 파악하기는 어렵습니다.
곱하기 문제가 있습니다 : 551.175 * 100 = 55117.49999999999 (ups!)
그래서 내 생각은 Math.round ()를 사용하기 전에 toFixed ()로 처리하는 것입니다.
function roundFix(number, precision)
{
var multi = Math.pow(10, precision);
return Math.round( (number * multi).toFixed(precision + 1) ) / multi;
}
답변
여기서 핵심은 올바르게 올림 한 다음 문자열로 변환하는 것입니다.
function roundOf(n, p) {
const n1 = n * Math.pow(10, p + 1);
const n2 = Math.floor(n1 / 10);
if (n1 >= (n2 * 10 + 5)) {
return (n2 + 1) / Math.pow(10, p);
}
return n2 / Math.pow(10, p);
}
// All edge cases listed in this thread
roundOf(95.345, 2); // 95.35
roundOf(95.344, 2); // 95.34
roundOf(5.0364342423, 2); // 5.04
roundOf(0.595, 2); // 0.60
roundOf(0.335, 2); // 0.34
roundOf(0.345, 2); // 0.35
roundOf(551.175, 2); // 551.18
roundOf(0.3445434, 2); // 0.34
이제이 값을 toFixed (p)로 안전하게 형식화 할 수 있습니다. 따라서 구체적인 경우 :
roundOf(0.3445434, 2).toFixed(2); // 0.34