0.5에 가장 가까운 자바 스크립트 반올림 숫자


96


누군가 나에게 가장 가까운 0.5로 반올림 할 수있는 방법을 알려줄 수 있습니까?
화면 해상도에 따라 웹 페이지의 요소 크기를 조정해야하며이를 위해 1, 1.5 또는 2 이상 등의 pt 단위로만 글꼴 크기를 할당 할 수 있습니다.

반올림하면 소수점 이하 1 자리로 반올림되거나 없음으로 반올림됩니다. 이 일을 어떻게 수행 할 수 있습니까?

답변:


187

2를 곱하고 반올림 한 다음 2로 나누는 함수를 작성하십시오.

function roundHalf(num) {
    return Math.round(num*2)/2;
}

이것을 사용하여 소수점 9 자리와 같이 돌아 오는 화폐 가치에 대한 감소 함수를 정리했습니다 ... (num * 100) / 100은 완벽하게 작동했습니다.
Dustin Kreidler

13.0 또는 13.5로 끝내고 싶다면 답을 아래와 같이 결합했습니다. function roundHalf (num) {return (Math.round (num * 2) / 2) .toFixed (1); }
Dan D 19

num * 2를 반올림하는 것은 모든 경우에 작동하지 않습니다. 15.27 => 수식을 사용하여 소수점을 시도하면 실제로 15.5를 반환해야하는 경우 => 15가됩니다. **** 나는에서는 toFixed이 더 좋을 것이다 사용하여 생각 (NUM은 * 2) () / 2 .toFixed
sfdx 폭탄

@sfdxbomb 당신은 이것을 확인 했습니까? 내 브라우저의 콘솔 roundHalf(15.27)에서 15.5를 반환합니다
malarres

81

다음은 유용 할 수있는보다 일반적인 솔루션입니다.

function round(value, step) {
    step || (step = 1.0);
    var inv = 1.0 / step;
    return Math.round(value * inv) / inv;
}

round(2.74, 0.1) = 2.7

round(2.74, 0.25) = 2.75

round(2.74, 0.5) = 2.5

round(2.74, 1.0) = 3.0


1
무슨 inv뜻이야? inv변수가 나타내는 것은 무엇입니까 ?
Deilan

1
@Deilan 나는 추측한다 inverse.
Alex K

2

Math.round(-0.5)0을 반환 하지만 수학 규칙에 따라 -1 이어야합니다 .

추가 정보 : Math.round ()Number.prototype.toFixed ()

function round(number) {
    var value = (number * 2).toFixed() / 2;
    return value;
}

1
@Yuri 당신이 말하는 것을 확장 round하기 위해, 주어진 값보다 큰 다음 정수로 반올림합니다. 음수는 양의 정수 스펙트럼을 향합니다. -2.5는 -2가됩니다. 그 맞습니까?
Danny Bullis

네 방금 확인했습니다. Math.ceil(-1.75) == -1Math.floor(-1.75) == -2. 그래서 사람을위한이에 의해 넘어지고, 단지로 생각 ceil리턴 보다 큰 수를 floor반환 보다 적은 수입니다.
Danny Bullis

2

0.5 이상으로 반올림하기 위해 newtron의 최상위 답변을 확장하려면

function roundByNum(num, rounder) {
    var multiplier = 1/(rounder||0.5);
    return Math.round(num*multiplier)/multiplier;
}

console.log(roundByNum(74.67)); //expected output 74.5
console.log(roundByNum(74.67, 0.25)); //expected output 74.75
console.log(roundByNum(74.67, 4)); //expected output 76

1
    function roundToTheHalfDollar(inputValue){
      var percentile = Math.round((Math.round(inputValue*Math.pow(10,2))/Math.pow(10,2)-parseFloat(Math.trunc(inputValue)))*100)
      var outputValue = (0.5 * (percentile >= 25 ? 1 : 0)) + (0.5 * (percentile >= 75 ? 1 : 0))
      return Math.trunc(inputValue) + outputValue
    }

나는 Tunaki의 더 나은 응답을보기 전에 이것을 썼다;)


0
var f = 2.6;
var v = Math.floor(f) + ( Math.round( (f - Math.floor(f)) ) ? 0.5 : 0.0 );

3
f = 1.9이면 v = 1이되며 이는 올바르지 않습니다.
bogatyrjov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.