2013-08-13 5 views
0

Я пытаюсь округлить значение в JS, но я получаю не округленное значение, это то, что у меня есть:круглые значения с плавающей точкой в ​​JavaScript

$(document).on("click", ".open-AddBookDialog", function() { 
       var agentPercentage = parseFloat($('#<%=ddlSplitPerc.ClientID%>').val()).toFixed(2); 
       var percMod = 1.0 - agentPercentage; 
       percMod = Math.ceil(percMod * 100)/100; 
       var dropdownAgentPerc = $('#<%=ddlPercSplitAgent.ClientID %>'); 
       dropdownAgentPerc.val(percMod); 
      dropdownAgentPerc.change();   
      $('#AddNewSplitAgentLife').modal('show'); 
      }); 

Например, agentPerentage 0.7 и когда я вычитая 1 - 0,7 Я получаю следующее значение:

0,30000000000000004

Что вы, ребята, думаете, я должен изменить? Я также попробовал пример Math.cell, но в результате получаю 0,31. Пожалуйста, совет. Спасибо, Лациале

+0

Итак, вы говорите, что удивляетесь, что математика с плавающей запятой не точная на компьютере? – Tomalak

+0

Это говорит вам, почему вы получаете этот результат: [Является ли JavaScript с плавающей запятой Math Broken?] (Http://stackoverflow.com/questions/588004/is-javascripts-floating-point-math-broken) – bfavaretto

ответ

3

Решения другого вопроса уже спросил: Dealing with float precision in Javascript

(Math.floor(y/x) * x).toFixed(2); 
+0

thx для ваш ответ, но как я могу использовать эту формулу в моем случае? Я не делаю никаких делений, я пробовал (Math.floor (1 - 0.7) * 1), но я получаю 0 в результате. Спасибо – Laziale

+0

Вам нужна только часть '.toFixed (2)'. – jerone

0

Он должен работать, если вычесть из .5 значения, которое вы передаете Math.ceil

percMod = Math.ceil((percMod * 100) -.5)/ 100; 

Math .ceil округляется до любого десятичного знака выше .000

Таким образом, чтобы моделировать типичное поведение округления только округлых десятичных знаков выше .500 вы должны вычесть .5

Смежные вопросы