Подтвердить что ты не робот

Как получить долю от числа с плавающей точкой?

У меня есть число с плавающей запятой:

var f = 0.1457;

Или:

var f = 4.7005

Как получить только остаток дроби как целое?

т.е. в первом примере я хочу получить:

var remainder = 1457;

Во втором примере:

var remainder = 7005;
4b9b3361

Ответ 1

Это сделает это (до 4 цифр, которые вы хотите, измените мультипликатор (10000) на больший или меньший, если вы хотите меньшее или большее число):

Math.ceil(((f < 1.0) ? f : (f % Math.floor(f))) * 10000)

Ответ 2

function frac(f) {
    return f % 1;
}

надеюсь, что помогает; -)

Ответ 3

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

function fract(n){ return Number(String(n).split('.')[1] || 0); }
fract(1.23) // = 23
fract(123) // = 0
fract(0.0008) // = 8

Ответ 4

Вы можете вычесть пол номера, давая вам только дробную часть, а затем умножьте на 10000, т.е.:

var remainder = (f-Math.floor(f))*10000;

Ответ 5

parseInt(parseFloat(amount).toString().split('.')[1], 10)

Ответ 6

Это также зависит от того, что вы хотите сделать с остатком (как уже спрашивали комментаторы). Например, если базовое число равно 1.03, вы хотите, чтобы возвращаемый остаток был 3 или 03 - я имею в виду, вы хотите его как число или как строку (для отображения ее пользователю). Одним из примеров может служить просмотр цены на товары, где вы не хотите конвертировать 03 в 3 (например, $1,03), где вы хотите добавить индекс выше.

Далее, проблема заключается в точности float. Рассмотрим это:

var price = 1.03;
var frac = (price - Math.floor(price))*100;
// frac = 3.0000000000000027

Таким образом, вы можете "решить" это, разрезав представление строк без умножения (и необязательного нулевого заполнения) в таких случаях. В то же время вы избегаете проблемы с плавающей точностью. Также показано в этот jsfiddle.

Этот пост о плавающей точности может помочь, а этот.

Ответ 7

var strNumber = f.toString();
var remainder = strNumber.substr(strNumber.indexOf('.') + 1, 4);
remainder = Number(reminder);

Ответ 8

Я бы сказал, что, предполагая, что мы хотим отображать эти значения для пользователя, обработка этих чисел как строк будет лучшим подходом. Это оборачивается вопросом дробных значений, таких как 0,002.

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

let price = 23.43; // 23.43
let strPrice = price.toFixed(2) + ''; // "23.43"
let integer = strPrice.split(".")[0] // "23"
let fractional = strPrice.split(".")[1] // "43"