Ответ 1
Вы можете использовать toFixed(), чтобы сделать это
var twoPlacedFloat = parseFloat(yourString).toFixed(2)
У меня есть следующий код. Я бы хотел, чтобы это было так, что если price_result равно целому числу, скажем 10, то я бы хотел добавить два десятичных знака. Так что 10 будет 10.00. Или, если он равен 10,6, будет 10.60. Не знаете, как это сделать.
price_result = parseFloat(test_var.split('$')[1].slice(0,-1));
Вы можете использовать toFixed(), чтобы сделать это
var twoPlacedFloat = parseFloat(yourString).toFixed(2)
Когда вы используете toFixed
, он всегда возвращает значение в виде строки. Это иногда усложняет код. Чтобы этого избежать, вы можете сделать альтернативный метод для Number.
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 (number.toFixed(2))
Чтобы вернуть число, добавьте еще один круг скобок. Сохраняет чистоту.
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 from lodash, вероятно, лучший
_.ceil("315.9250488",2)
_.ceil(315.9250488,2)
_.ceil(undefined,2)
_.ceil(null,2)
_.ceil("",2)
будет работать также с номером, и это безопасно
Пожалуйста, используйте функцию ниже, если вы не хотите округлять.
function ConvertToDecimal(num) {
num = num.toString(); //If it 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 двойным) внутри, независимо от того, как вы много цифр вы хотите отображать с помощью.
Чтобы представить его для отображения, вы можете выбрать точность отображения в соответствии с тем, что вы хотите, преобразованием строки. Презентация - это проблема отображения, а не предмет хранения.
Краткий ответ @sd : в JS нет способа получить значение типа данных Number с конечными нулями после десятичной дроби.
Длинный ответ: Свойство toFixed
или toPrecision
для возврата String. Причина этого заключается в том, что тип данных Number не может иметь значение, подобное a = 2.00, он всегда удаляет завершающие нули после десятичной дроби, поэтому для достижения вышеупомянутого в JS у нас есть 2 варианта
Попробуйте это (см. комментарии в коде):
function fixInteger(el) {
// this is element 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 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);
}
простая строка 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);
}
}
Решение, которое работает для меня, заключается в следующем
parseFloat(value)
Solution for FormArray controllers
Инициализировать FormArray Form Builder
formInitilize() {
this.Form = this._formBuilder.group({
formArray: this._formBuilder.array([this.createForm()])
});
}
Создать форму
createForm() {
return (this.Form = this._formBuilder.group({
convertodecimal: ['']
}));
}
Установить значения формы в контроллере формы
setFormvalues() {
this.Form.setControl('formArray', this._formBuilder.array([]));
const control = <FormArray>this.resourceBalanceForm.controls['formArray'];
this.ListArrayValues.forEach((x) => {
control.push(this.buildForm(x));
});
}
private buildForm(x): FormGroup {
const bindvalues= this._formBuilder.group({
convertodecimal: x.ArrayCollection1? parseFloat(x.ArrayCollection1[0].name).toFixed(2) : '' // Option for array collection
// convertodecimal: x.number.toFixed(2) --- option for two decimal value
});
return bindvalues;
}
У меня есть другое решение.
Вы можете использовать round()
для этого вместо toFixed()
var twoPlacedFloat = parseFloat(yourString).round(2)