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

bq3bfh9z  于 2022-12-25  发布在  Java
关注(0)|答案(9)|浏览(185)

我有一个浮点数:

var f = 0.1457;

或者:

var f = 4.7005

我怎样才能把分数余数取成整数呢?
也就是说,在第一个例子中,我想得到:

var remainder = 1457;

在第二个示例中:

var remainder = 7005;
baubqpgj

baubqpgj1#

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

n7taea2i2#

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

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

bf1o4zei3#

这将做到这一点(最多4位,你想要的,改变乘数(10000),以更大或更小,如果你想要更小或更大的数字):

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

5m1hhzi45#

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

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

7fyelxc56#

我认为,假设我们想把这些值显示给用户,把这些数字当作字符串是最好的方法,这就避开了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"
puruo6ea

puruo6ea7#

这还取决于您要如何处理剩余部分例如,如果基数是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 postthis one可能同样有帮助。

kqhtkvqz

kqhtkvqz8#

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

93ze6v8z9#

@乌达拉·塞纳维拉特纳

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)

相关问题