#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
Ответ №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