[javascript] Javascript에서 소수점 이하 1 자리로 반올림하는 방법은 무엇입니까?

소수점 이하의 자바 스크립트에서 숫자를 1 자로 올릴 수 있습니까 (올바로 반올림)?

나는 * 10, round, 10을 시도했지만 int 끝에 두 개의 소수점을 남깁니다.



답변

Math.round(num * 10) / 10 작품, 여기에 예가 있습니다 …

var number = 12.3456789
var rounded = Math.round(number * 10) / 10
// rounded is 12.3

소수점 이하 한 자리를 원한다면 0이더라도 추가하십시오 …

var fixed = rounded.toFixed(1)
// fixed is always to 1 d.p.
// NOTE: .toFixed() returns a string!

// To convert back to number format
parseFloat(number.toFixed(2))
// 12.34
// but that will not retain any trailing zeros

// So, just make sure it is the last step before output,
// and use a number format during calculations!

편집 : 정밀 함수로 라운드 추가 …

이 원리를 사용하여 참고로 여기에 정밀한 작은 원형 함수가 있습니다 …

function round(value, precision) {
    var multiplier = Math.pow(10, precision || 0);
    return Math.round(value * multiplier) / multiplier;
}

… 사용법 …

round(12345.6789, 2) // 12345.68
round(12345.6789, 1) // 12345.7

… 기본적으로 가장 가까운 정수로 반올림합니다 (정밀도 0) …

round(12345.6789) // 12346

… 가장 가까운 10 또는 100 등으로 반올림하는 데 사용할 수 있습니다 …

round(12345.6789, -1) // 12350
round(12345.6789, -2) // 12300

… 음수의 올바른 처리 …

round(-123.45, 1) // -123.4
round(123.45, 1) // 123.5

… toFixed와 결합하여 일관되게 문자열 형식으로 지정할 수 있습니다 …

round(456.7, 2).toFixed(2) // "456.70"


답변

var number = 123.456;

console.log(number.toFixed(1)); // should round to 123.5


답변

사용 Math.round(5.01)하면 5대신에5.0 .

당신이 사용하는 경우 toFixed 하면 반올림 문제가 발생 합니다.

두 세계의 최고를 원한다면 두 가지를 결합하십시오.

(Math.round(5.01 * 10) / 10).toFixed(1)

이를 위해 함수를 생성 할 수 있습니다.

function roundedToFixed(_float, _digits){
  var rounded = Math.pow(10, _digits);
  return (Math.round(_float * rounded) / rounded).toFixed(_digits);
}


답변

lodashround방법을 :

_.round(4.006);
// => 4

_.round(4.006, 2);
// => 4.01

_.round(4060, -2);
// => 4100

문서 .

소스 .


답변

에 투표 toFixed()하지만 레코드에 대해서는 비트 시프트를 사용하여 숫자를 int로 캐스팅하는 다른 방법이 있습니다. 따라서 항상 0으로 반올림합니다 (양수의 경우 아래로, 음수의 경우 위로).

var rounded = ((num * 10) << 0) * 0.1;

그러나 함수 호출이 없기 때문에 사악합니다. 🙂

다음은 문자열 일치를 사용하는 것입니다.

var rounded = (num + '').replace(/(^.*?\d+)(\.\d)?.*/, '$1$2');

나는 문자열 변형을 사용하는 것을 권장하지 않습니다.


답변

이것으로 시도하십시오 :

var original=28.453

// 1.- round "original" to two decimals
var result = Math.round (original * 100) / 100  //returns 28.45

// 2.- round "original" to 1 decimal
var result = Math.round (original * 10) / 10  //returns 28.5

// 3.- round 8.111111 to 3 decimals
var result = Math.round (8.111111 * 1000) / 1000  //returns 8.111

덜 복잡하고 쉽게 구현할 수 있습니다 …

이를 통해 다음과 같은 기능을 수행 할 수 있습니다.

function RoundAndFix (n, d) {
    var m = Math.pow (10, d);
    return Math.round (n * m) / m;
}

편집 : ROUND HALF UP을 사용하여 반올림하는 방법을 참조하십시오 . 우리 대부분이 초등학교에서 배운 반올림 모드


답변

x = 숫자, n = 소수점 이하 자릿수 :

function round(x, n) {
    return Math.round(x * Math.pow(10, n)) / Math.pow(10, n)
}