如何从浮点数中得到一个分数?

时间:2011-01-12 09:43:19

标签: javascript jquery

我有一个浮点数:

var f = 0.1457;

或者:

var f = 4.7005

如何将分数余数作为整数?

即。在我想得到的第一个例子中:

var remainder = 1457;

在第二个例子中:

var remainder = 7005;

9 个答案:

答案 0 :(得分:81)

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

希望有所帮助; - )

答案 1 :(得分:5)

这样做(最多可达4个数字,如果想要更小或更大的数字,可将倍数(10000)更大或更小):

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

答案 2 :(得分:5)

虽然这不是大多数人想要的,但是TS要求fract为整数,这里是:

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

答案 3 :(得分:3)

您可以减去数字的下限,只给出小数部分,然后乘以10000,即:

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

这还取决于你想要对其余部分做什么(正如已经提到的评论者)。例如,如果基数为1.03,您是否希望返回的余数为3或03 - 我的意思是,您希望将其作为数字还是字符串(以便将其显示给用户)。一个例子是文章价格显示,你不想在03到3(例如$ 1.03)汇总你想要上标03。

接下来,问题在于浮点精度。考虑一下:

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

所以你可以通过在没有乘法(和可选的零填充)的情况下切片字符串表示来“解决”这个问题。同时,您避免浮动精度问题。也在this jsfiddle中进行了演示。

关于浮动精度的

This post可能与this one一样有用。

答案 6 :(得分:1)

我认为,假设我们想要向用户显示这些值,将这些数字视为字符串将是最好的方法。这绕过了小数值的问题,例如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"

答案 7 :(得分:0)

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

答案 8 :(得分:-1)

@Udara Seneviratne

const findFraction = (num) => {

  return parseInt( // 5.---------------- And finally we parses a "string" type and returns an integer
    
    // 1. We convert our parameter "num" to the "string" type (to work as with an array in the next step)
    // result: "1.012312"
    num.toString() 

    // 2. Here we separating the string as an array using the separator: " . "
    // result: ["1", "012312"]
    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split
    .split('.')

    // 3. With help a method "Array.splice" we cut the first element of our array
    // result: ["012312"]
    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
    .splice(1.1)

    // 4. With help a method "Array.shift" we remove the first element from an array and returns that
    // result: 012312 (But it's still the "string" type)
    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift
    .shift()       

  )
}

// Try it
console.log("Result is = " + findFraction (1.012312))
// Type of result
console.log("Type of result = " + typeof findFraction (1.012312))
// Some later operation
console.log("Result + some number is = " + findFraction (1.012312) + 555)