在Javascript中将int 12345转换为float 1.2345
我想把12345变成1.2345 这个数字不同 这就是我到目前为止所做的,它是有效的,只是不太好看,而且看起来像一个黑客在Javascript中将int 12345转换为float 1.2345,javascript,math,Javascript,Math,我想把12345变成1.2345 这个数字不同 这就是我到目前为止所做的,它是有效的,只是不太好看,而且看起来像一个黑客 var number = 12345 > 12345 var numLength = number.toString().length > 5 var str = number +'e-' + (numLength - 1) > "12345e-4" var float = parseFloat(str) > 1.2345 有没有什么东西能让我的小数
var number = 12345
> 12345
var numLength = number.toString().length
> 5
var str = number +'e-' + (numLength - 1)
> "12345e-4"
var float = parseFloat(str)
> 1.2345
有没有什么东西能让我的小数点向后退4位
我试过了
Math.pow(number, -4)
> 4.3056192580926564e-17
它甚至一点也不能满足我的需要
Math.exp()返回Ex,其中x是参数,E是欧拉常数(2.718…),自然对数的底。
除以10000
不起作用,因为数字并不总是12345
。它可能是123
或1234234614
。在这两种情况下,我仍然需要1.23
或1.23423614
function getBase10Mantissa(input) {
// Make sure we're working with a number.
var source = parseFloat(input);
// Get an integer for the base-10 log for the source value (round down in case of
// negative result).
var exponent = Math.floor(Math.log10(source));
// Raise 10 to the power of exponent and divide the source value by that.
var mantissa = source / Math.pow(10, exponent);
// Return mantissa only (per request).
return mantissa;
}
需要将n除以10^x,其中x是数字的“长度”。原来数字的长度只是数字对数的底。你考虑过除以10000吗?@RaymondChen-Hoare定律。:-)@当然是雷蒙陈。但不一定是10000。查询可能是123,除以10000不起作用。在这一点上,我需要除以100。fun的正则表达式f=function(x,n){var r=x.match(/^(-)(\d+)(.d+)(.d+)/),dec=r[2]+(r[3]?r[3]。slice(1):“”;如果(n!==未定义)dec=dec.slice(0,n);返回r[1]+'.+dec+'e'+r[2]。length}f('-12345.678'完美的a+表示简单。@BrianNoah当然。你可以做到。我已经做得足够彻底了,如果你需要的话,你会得到这两个部分。仅供参考,我在node.js中这样做,它已经删除了log10(或者只是没有添加它),我必须做Math.log(number)/Math.log(10)
,以便log10@BrianNoah图书馆中的一个缺陷的优雅解决方案+1.
function f(n){
return n/(Math.pow(10, Math.floor(Math.log10(n))));
}