Невозможно округлить число, используя Math.round или Math.ceil - PullRequest
2 голосов
/ 03 февраля 2020

У меня есть массив чисел, который я хотел бы округлить, чтобы он всегда заканчивался #.#0 или #.#5. Но когда я попробовал либо Math.round, либо Math.ceil, они возвращают мне целые числа.

let result = []

const numbers = [
  3.33,  // 3.35
  1.00,  // 1.00
  1.11,  // 1.15
  1.50,  // 1.50
  5.99,  // 6.00
  5.66,  // 7.00
]

result = numbers.map(number => Math.round(number, 2))
result = numbers.map(number => Math.ceil(number, 2))

console.log(result)

Это результат, который я получаю

[
  4,
  1,
  2,
  2,
  6,
  6,
]

Но я пытаюсь достичь этого результата

[
  3.35
  1.00
  1.15
  1.50
  6.00
  7.00
]

let result = []

const numbers = [
  3.33,  // 3.35
  1.00,  // 1.00
  1.11,  // 1.15
  1.50,  // 1.50
  5.99,  // 6.00
  5.66,  // 7.00
]

result = numbers.map(number => Math.round(number, 2))
result = numbers.map(number => Math.ceil(number, 2))

console.log(result)

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

var numbers = [
    3.33,  // 3.35
    1.00,  // 1.00
    1.11,  // 1.15
    1.50,  // 1.50
    5.99,  // 6.00
    5.66,  // 5.7
    2.2    // 2.00
  ]

 console.log(numbers.map(x => {
     let tmp = Number((x * 100).toFixed());
     if(tmp % 5 > 0) tmp += 5 - tmp % 5
     return tmp / 100 
 }))
0 голосов
/ 03 февраля 2020

Math.round() округляет до ближайшего целого числа. Если вы хотите округлить до 1/20 th, вы можете сделать Math.round(number*20) / 20.

или Math.ceil(number*20) / 20, если вы всегда хотите округлить.

const numbers = [
  3.33,  // 3.35
  1.00,  // 1.00
  1.11,  // 1.15
  1.50,  // 1.50
  5.99,  // 6.00
  5.66,  // 7.00
]

let result = numbers.map(number => Math.ceil(number*20) / 20)

console.log(result)
...