Разделите десятичные дроби значения в новую переменную (например: получите «0,6» от значения «3,6») - PullRequest
2 голосов
/ 14 марта 2012

Я хочу создать новую переменную на основе любых десятичных значений, которые имеет переменная.

т.е.:

myValue = 3.6

function twoNewVars{...}

newVar1 = 3
newVar2 = 0.6

Использование jQuery или javascript.Можно ли разделить это, просто посмотрев на позицию "."?

Возможно, обработать цифру "3.6" как буквальную строку, а затем разделить ее ... но это кажется немного грязным, надеюсь, что естьболее элегантный способ сделать это.

(NB. Совсем не обязательно понимать вопрос - мне это нужно для более четкого позиционирования элементов на странице. У меня есть высота области просмотра, которая может быть любой, изатем контент, который основан на фиксированной высоте, если я могу найти несоответствие между фиксированной высотой повторяющегося контента и произвольной высотой окна просмотра, я могу автоматически расположить объекты для аккуратной резки)

Ответы [ 3 ]

6 голосов
/ 14 марта 2012

Вы можете использовать разницу между исходным числом и ближайшим значением к нулю.

Однако в Javascript нет способа получить «ближайшее значение к нулю».Это добавляет этот метод:

// return integer part - may be negative
Math.trunc = function(n) {
    return (n < 0) ? Math.ceil(n) : Math.floor(n);
}

Вы можете использовать это, чтобы получить дробную часть.Обратите внимание, что если вы введете отрицательное число, результат также будет отрицательным.

// return fraction part
Math.frac = function(n) {
    return n - Math.trunc(n);
}

В библиотеке C99 есть функция modf, которая может эмулироваться с учетом двух указанных выше функций:

Math.modf = function(n) {
    return [Math.trunc(n), Math.frac(n)];
}

т.е. он возвращает массив, содержащий целочисленную часть, а затем дробную часть.

2 голосов
/ 14 марта 2012

Это должно сделать:

var myValue = 3.6;

function twoNewVars(){
    var newVar1 = Math.floor(3.6),
        newVar2 = (myValue - Math.floor(myValue)).toFixed(1);
}

или заставьте функцию возвращать объект литерал, если хотите увидеть переменные:

function twoNewVars(){
    return {
        newVar1: Math.floor(3.6),
        newVar2: (myValue - Math.floor(myValue)).toFixed(1)
    };
}

twoNewVars().newVar1;
twoNewVars().newVar2;
1 голос
/ 14 марта 2012

Из-за числа с плавающей запятой большинство десятичных чисел не возвращают ожидаемое вами число.

3.6-3 возвращает, например, 0.6000000000000001.

Вы можете умножить и округлить число или использовать toFixed и преобразовать его в число:

Number.prototype.decimalpart= function(sig){
    sig= sig || 12;
    return +((this%1).toFixed(sig));
}
3.6.decimalpart()>>0.6

Разделение строки может быть проще.

...