Как разобрать float с двумя десятичными знаками в javascript?



У меня есть следующий код. Я хотел бы иметь его таким, что если price_result равен целому числу, скажем 10, то я хотел бы добавить два десятичных знака. Так что 10 будет в 10.00.
Или если он равен 10.6 будет 10.60. Не знаю, как это сделать.



price_result = parseFloat(test_var.split('$')[1].slice(0,-1));
502   12  

12 ответов:

можно использовать toFixed() для этого

var twoPlacedFloat = parseFloat(yourString).toFixed(2)

при использовании toFixed, Она всегда возвращает значение в виде строки. Это иногда усложняет код. Чтобы избежать этого, вы можете сделать альтернативный метод для числа.

Number.prototype.round = function(p) {
  p = p || 10;
  return parseFloat( this.toFixed(p) );
};

и использовать:

var n = 22 / 7; // 3.142857142857143
n.round(3); // 3.143

или просто:

(22/7).round(3); // 3.143

Если вам нужна производительность (как в играх):

Math.round(number * 100) / 100

Это примерно в 100 раз быстрее, чем parseFloat(количество.toFixed(2))

http://jsperf.com/parsefloat-tofixed-vs-math-round

чтобы вернуть число, добавьте еще один слой скобок. Держит его в чистоте.

var twoPlacedFloat = parseFloat((10.02745).toFixed(2));

Если ваша цель состоит в том, чтобы разобрать, и ваш ввод может быть литералом, то вы ожидаете float и toFixed не будет предоставлять это, так что вот две простые функции, чтобы обеспечить это:

function parseFloat2Decimals(value) {
    return parseFloat(parseFloat(value).toFixed(2));
}

function parseFloat2Decimals(value,decimalPlaces) {
    return parseFloat(parseFloat(value).toFixed(decimalPlaces));
}

подшить от лодашь это, пожалуй, лучший

_.ceil("315.9250488",2) 
_.ceil(315.9250488,2) 
_.ceil(undefined,2)
_.ceil(null,2)
_.ceil("",2)

будет работать также с номером и безопасно

попробуйте это (см. комментарии в коде):

function fixInteger(el) {
    // this is element's value selector, you should use your own
    value = $(el).val();
    if (value == '') {
        value = 0;
    }
    newValue = parseInt(value);
    // if new value is Nan (when input is a string with no integers in it)
    if (isNaN(newValue)) {
        value = 0;
        newValue = parseInt(value);
    }
    // apply new value to element
    $(el).val(newValue);
}

function fixPrice(el) {
    // this is element's value selector, you should use your own
    value = $(el).val();
    if (value == '') {
        value = 0;
    }
    newValue = parseFloat(value.replace(',', '.')).toFixed(2);
    // if new value is Nan (when input is a string with no integers in it)
    if (isNaN(newValue)) {
        value = 0;
        newValue = parseFloat(value).toFixed(2);
    }
    // apply new value to element
    $(el).val(newValue);
}

пожалуйста, используйте функцию ниже, если вы не хотите округлять.

function ConvertToDecimal(num) {
    num = num.toString(); //If it's not already a String
    num = num.slice(0, (num.indexOf(".")) + 3); //With 3 exposing the hundredths place
   alert('M : ' +  Number(num)); //If you need it back as a Number    
}

для чего это стоит: десятичное число, это десятичное число, вы либо округляете его до какого-то другого значения или нет. Внутренне он будет приближаться к десятичной дроби в соответствии с правилом артметики и обработки с плавающей запятой. Он остается десятичным числом (с плавающей запятой, в JS двойной) внутренне, независимо от того, сколько цифр вы хотите отобразить его.

чтобы представить его для отображения, вы можете выбрать точность отображения на все, что вы хотите с помощью преобразования строк. Презентация-это проблема отображения, а не хранения.

решение, которое работает для меня является следующим

parseFloat(value)

простая строка javascript для float

var it_price = chief_double($("#ContentPlaceHolder1_txt_it_price").val());

function chief_double(num){
    var n = parseFloat(num);
    if (isNaN(n)) {
        return "0";
    }
    else {
        return parseFloat(num);
    }
}

у меня есть другое решение.

можно использовать round() чтобы сделать это вместо toFixed()

var twoPlacedFloat = parseFloat(yourString).round(2)

Comments

    Ничего не найдено.