Есть ли функция ay JS для поиска значения до и после десятичной точки

#javascript #jquery

#javascript #jquery

Вопрос:

Я проверяю десятичное число с помощью JavaScript. Я просто использую NaN

var a = 12345.67 Существует ли какая-либо функция javascript для получения количества или самого значения до и после десятичной точки.

 before()  should return 1234
after() should return 67
  

Пожалуйста, не предлагайте подстроку!

Комментарии:

1. простой вопрос. у разных людей разные ответы. это успех SO . great 🙂

Ответ №1:

 var a = 12345.67;

alert(a.toString().split(".")[0]); ///before
alert(a.toString().split(".")[1]); ///after
  

Вот простая скрипка http://jsfiddle.net/qWtSc /


Предложение zzzzBov заключается в следующем

 Number.prototype.before = function () {
  var value = parseInt(this.toString().split(".")[0], 10);//before
  return value ? value : 0;
}

Number.prototype.after = function () {
  var value = parseInt(this.toString().split(".")[1], 10);//after
  return value ? value : 0;
}
  

Использование

 alert(a.before()); ///before
alert(a.after()); ///after
  

Комментарии:

1. Спасибо. но я думал, что будет какая-то числовая функция. это будет работать в любом случае, но эта строковая функция, если вы найдете какую-либо числовую функцию, пожалуйста, предложите

2. @user987880, вы могли бы просто расширить Number.prototype , чтобы добавить необходимые функции.

3. Эти функции не работают для больших чисел, т. Е. Когда вместо этого используется научная нотация.

4. 100.10 после возврата десятичной точки 1 , 100.0000 после возврата десятичной точки NaN , возможно, это ожидаемое поведение, хотя меня это удивило.

Ответ №2:

before это просто. Это просто операция округления.

 var before = function(n) {
  return Math.floor(n);
};
  

after сложнее без обработки строк. Я имею в виду, как бы вы справились after(Math.PI) ? В конце концов, вы не можете хранить целое число с бесконечным числом цифр.

Но с некоторой обработкой строк это легко, просто знайте, что это не будет точным из-за чудес математики с плавающей запятой.

 var after = function(n) {
  var fraction = n.toString().split('.')[1];
  return parseInt(fraction, 10);
};
  

Комментарии:

1. Для голосования требуется репутация 15! так что пока просто спасибо 🙂

2. Если вам нужно десятичное значение после — (т.Е. 1,123 = 0,123), вы можете просто сделать n - Math.floor(n)

3. Поскольку вопрос касался ‘after’ как целого числа, получить его было бы легко, например, так: (n — Math.floor(n)) * 100

Ответ №3:

Воспроизведение других ответов… и вы хотели «числовую» версию.. по-прежнему проще всего преобразовать его в строку и отработать функцию разделения…

 function getNatural(num) {
    return parseFloat(num.toString().split(".")[0]);
}
function getDecimal(num) {
    return parseFloat(num.toString().split(".")[1]);
}
var a = 12345.67;

alert(getNatural(a)); ///before
alert(getDecimal(a)); ///after
  

http://jsfiddle.net/rlemon/qWtSc/1/

Ответ №4:

 var decimalPlaces = 2;    
var num = 12345.673
var roundedDecimal = num.toFixed(decimalPlaces);

var intPart = Math.floor(roundedDecimal);
var fracPart = parseInt((roundedDecimal - intPart), 10);

//or

var fractPart = (roundedDecimal - intPart) * Math.pow(10, decimalPlaces);
  

Комментарии:

1. Они хотели, чтобы fracPart было 67, а не .67.

2. @user987880 Добавил некоторый код — подход под другим углом 🙂

Ответ №5:

Чтобы найти количество / длину символов после точки:

 var a = 12345.67;
var after_dot = (a.toString().split(".")[1]).length;
var before_dot= (a.toString().split(".")[0]).length;
  

Ответ №6:

К сожалению, нет способа получить дробную часть надежным способом, используя математические функции, потому что часто возникают довольно странные округления, в зависимости от используемого движка Javascript. Лучше всего преобразовать его в строку, а затем проверить, представлены ли результаты в десятичной или научной нотации.

 Number.prototype.after = function() {
    var string = this.toString();
    var epos = string.indexOf("e");
    if (epos === -1) { // Decimal notation
        var i = string.indexOf(".");
        return i === -1 ? "" : n.substring(i   1);
    }
    // Scientific notation
    var exp = string.substring(epos   1) - 0; // this is actually faster
                                              // than parseInt in many browsers
    var mantix = n.string.substring(0, epos).replace(".", "");
    if (exp >= -1) return mantix.substring(exp   1);
    for (; exp < -1; exp  ) mantix = "0"   mantix;
    return mantix;
}
  

Ответ №7:

Если ваши цифры после десятичной точки фиксированы, то это решение работает без преобразования в строку.

В этом примере показано решение для 2 цифр после десятичной запятой.

Перед десятичной запятой:

    const wholeNum = Math.floor(num);
  

После десятичной:

    let decimal = (num - wholeNum) * 100