function prec(numb){
var numb_string = numb.toString().split('.')
return numb_string[(numb_string.length - 1)].length
}
function randy(minimum, maximum) {
var most_accurate = Math.max ( prec(minimum), prec(maximum) );
return ( ( Math.random() * ( maximum - minimum ) + minimum ).toFixed( most_accurate ) );
}
// returns random numbers between these points. 1 decimal place of precision:
console.log( randy(2.4,4.4) );
// returns random numbers between these points. 3 decimal places of precision:
console.log( randy(2.443,4.445) );
// returns random numbers between these points. Want 3 decimal places of precision. However, get 0:
console.log( randy(2.000,4.000) );
// Why do I get 0 decimal places? Because floats are rounded into integers automatically:
console.log( 4.0 ); // want 4.0 to be logged. Instead I get '4'
您不需要阅读这些功能的工作原理。只是控制台日志。
基本上,我需要在两点之间返回一个精确度的随机数。精度自动派生自传递给randy
函数的最精确浮点数。
当数字范围为3.5
3.7
或34.4322
800.3233
但不是2.0
,3.0
或{{1}时,此方法正常},4.0000
然后该数字似乎自动保存为整数:
5.0000
我想扩展Number原型,以便将console.log( 2.0 ) //=> 2
保存为2.0
,以便此函数可以找到精度:
2.0
目前认为function prec(numb){
var numb_string = numb.toString().split('.')
return numb_string[(numb_string.length - 1)].length
}
的精确度为0位小数,因为如果将3.000000000
作为3E8
参数传入,则会将其读作numb
。我希望它读作3
虽然我可以做到这一点3.000000000
但是它变得难以理解,对于较小的精确度来说,这无疑更好:randy(2.toFixed(3),3.toFixed(3))
。
这可能吗?
答案 0 :(得分:4)
有一种聪明的方法可以解决这个问题,就是定义一个可以帮助你管理数值和小数值的类。
function HappyNumber()
{
this.value = (typeof(arguments[0]) == "number") ? arguments[0] : 0;
this.decimal = (typeof(arguments[1]) == "number") ? arguments[1] : 0;
this.Val = function()
{
return parseFloat(this.value.toFixed(this.decimal));
}
this.toString = function()
{
return (this.value.toFixed(this.decimal)).toString();
}
}
现在要做的第一件事是创建一个像这样的新数字
var Num = HappyNumber(4.123545,3);
// first argument is the value
// and second one is decimal
要获取变量的值,您应该使用函数Val
,如下所示
console.log(Num.Val()); // this one prints 4.123 on your console
最重要的部分就是这个,当你使用toString
功能时,它会返回你的号码
Num.toString() // it returns "4.123"
(new HappyNumber(4,4)).toString(); // it returns "4.0000"
现在您将参数传递为(HappyNumber),并在函数内部使用toString,它返回您需要的正确值,它适用于 1.00 2.000 4.00000
答案 1 :(得分:1)
这将做你想要的。 (警告:这可能不是一个好主意。)
Number.prototype.toString = function () { return this.toFixed(1); }