값이 15.7784514라고 가정하고 반올림하지 않고 15.77을 표시하려고합니다.
var num = parseFloat(15.7784514);
document.write(num.toFixed(1)+"<br />");
document.write(num.toFixed(2)+"<br />");
document.write(num.toFixed(3)+"<br />");
document.write(num.toFixed(10));
결과-
15.8
15.78
15.778
15.7784514000
15.77을 어떻게 표시합니까?
답변
숫자를 문자열로 변환하고 숫자를 소수점 둘째 자리까지 일치시킵니다.
function calc(theform) {
var num = theform.original.value, rounded = theform.rounded
var with2Decimals = num.toString().match(/^-?\d+(?:\.\d{0,2})?/)[0]
rounded.value = with2Decimals
}
<form onsubmit="return calc(this)">
Original number: <input name="original" type="text" onkeyup="calc(form)" onchange="calc(form)" />
<br />"Rounded" number: <input name="rounded" type="text" placeholder="readonly" readonly>
</form>
이 toFixed
방법은 경우와 달리 실패 toString
하므로 매우주의하십시오.
답변
2016 년 11 월 5 일 업데이트
항상 정확한 새로운 답변
function toFixed(num, fixed) {
var re = new RegExp('^-?\\d+(?:\.\\d{0,' + (fixed || -1) + '})?');
return num.toString().match(re)[0];
}
으로 자바 스크립트에서 부동 소수점 연산을하는 것은 항상 가장자리 케이스를해야합니다, 이전 솔루션은 좋은 것만으로는 충분하지 않습니다 대부분의 시간을 정확합니다. 이와 같은 솔루션 num.toPrecision
에는 BigDecimal.js 및 accounting.js가 있습니다. 그러나 문자열을 파싱하는 것이 가장 간단하고 항상 정확하다고 생각합니다.
@Gumbo의 승인 된 답변에서 잘 작성된 정규식을 기반으로 한이 새로운 고정 기능은 항상 예상대로 작동합니다.
항상 정확한 답변은 아닙니다.
고정 된 기능으로 롤업 :
function toFixed(num, fixed) {
fixed = fixed || 0;
fixed = Math.pow(10, fixed);
return Math.floor(num * fixed) / fixed;
}
답변
대신 문자열로 나머지를 수동으로 제거하기 위해 이것을 작성하기로 결정 했으므로 숫자와 함께 제공되는 수학 문제를 처리 할 필요가 없습니다.
num = num.toString(); //If it's not already a String
num = num.slice(0, (num.indexOf("."))+3); //With 3 exposing the hundredths place
Number(num); //If you need it back as a Number
그러면 숫자 = 15.7784514 인 “15.77”이 표시됩니다.
답변
2017 년 10 월
숫자를 n 번째 10 진수로 자르고 (반올림하지 않음) n≥0 인 경우 정확히 n 개의 10 진수가있는 문자열로 변환하는 일반적인 솔루션입니다.
function toFixedTrunc(x, n) {
const v = (typeof x === 'string' ? x : x.toString()).split('.');
if (n <= 0) return v[0];
let f = v[1] || '';
if (f.length > n) return `${v[0]}.${f.substr(0,n)}`;
while (f.length < n) f += '0';
return `${v[0]}.${f}`
}
여기서 x는 숫자 (문자열로 변환 됨) 또는 문자열 일 수 있습니다.
다음은 n = 2에 대한 몇 가지 테스트입니다 (OP에서 요청한 테스트 포함).
0 => 0.00
0.01 => 0.01
0.5839 => 0.58
0.999 => 0.99
1.01 => 1.01
2 => 2.00
2.551 => 2.55
2.99999 => 2.99
4.27 => 4.27
15.7784514 => 15.77
123.5999 => 123.59
0.000000199 => 1.99 *
참고에 언급 된 바와 같이, 이는 “1.99e-7″및 다른 n 값에 대한 지수로의 자바 스크립트 암시 적 변환 때문입니다.
15.001097 => 15.0010 (n=4)
0.000003298 => 0.0000032 (n=7)
0.000003298257899 => 0.000003298257 (n=12)
답변
parseInt가 Math.floor보다 빠릅니다.
function floorFigure(figure, decimals){
if (!decimals) decimals = 2;
var d = Math.pow(10,decimals);
return (parseInt(figure*d)/d).toFixed(decimals);
};
floorFigure(123.5999) => "123.59"
floorFigure(123.5999, 3) => "123.599"
답변
num = 19.66752
f = num.toFixed(3).slice(0,-1)
alert(f)
이것은 19.66을 반환합니다
답변
간단 해
number = parseInt(number * 100)/100;