Js десятичная точность toFixed () не возвращает правильное значение

Я пытаюсь округлить значение с точностью 2.

Вот фрагмент кода,

значение var = 250,445; var result = (значение) .toFixed (2);

результат содержит 250.44, после roundOff он должен хранить 250.45,

Я также пробовал это, набирая текст непосредственно в консоли Chrome. но по-прежнему показывает значение 250,44.

Заранее спасибо.

toFixed будет пол. не круглый. что на самом деле довольно хорошо. это не ошибка.

GottZ 03.04.2018 14:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
308
5

Ответы 5

function round(num,dec)
{
  num = Math.round(num+'e'+dec)
  return Number(num+'e-'+dec)
}

Usage: alert(round(yourNumbber ,decimalsBehindYourNumber));

example: alert(round(2.453,1))

что означает округление 2,453 до 2,5

попробуй!

взглянуть

Хорошо, я постараюсь, спасибо за уделенное время

user2781186 03.04.2018 14:09

Я обновил свой ответ примером. Кроме того, вы можете отметить это как ответ, если этот код работает @ user2781186

Rizkita 03.04.2018 14:16

привет @ user2781186, вы можете отметить это как ответ, если найдете это как решение

Rizkita 10.04.2018 02:58

Ты можешь использовать:

Math.round(your var or number);

или же

Math.floor(your var or number);

$('#teste').html(Math.round(245.655) + " - Round")
$('#testefloor').html(Math.floor(245.655) + " - Floor")
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label id = "teste"></label><br>
<label id = "testefloor"></label>

Дело в том, что tofixed () не всегда округляется правильно. Это уже было отмечено здесь, а также здесь.

Основная проблема заключается в том, что десятичное число 250,445 в двоичном формате, вероятно, немного меньше, что приводит к округлению результата. Для решения этой проблемы есть несколько самописных функций. E. g.

function toFixed( num, precision ) {
    return (+(Math.round(+(num + 'e' + precision)) + 'e' + -precision)).toFixed(precision);
}

var value = 250.445; var result = (value).toFixed(2); result contains 250.44

250,44 - это абсолютно правильный результат, потому что в компьютере нет точного представления 250,445. При чтении 250,445 оно округляется до ближайшего возможного значения = 250,444999999999993 (64-битное с плавающей точкой). Округление этого числа на toFixed (2) дает 250,44.

кстати, 250.444999999999993 хранится внутри как 0x406f4e3d70a3d70a, а следующее более высокое значение - 0x406f4e3d70a3d70b == 250.445000000000022.

toFixed () работает правильно, но большинство людей не понимают проблематичность ограниченного представления чисел с плавающей запятой.

По первой ссылке: 239,575 хранится внутри как 239,574999999999989, а округление до 2 цифр составляет 239,57, а не 239,58. Если вы введете 239.5749999, все функции замены, определенные пользователем, работают неправильно.

Другие вопросы по теме