Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果数字在给定范围内,是否有一种简洁的方法返回用于对数字进行四舍五入的值?_Javascript - Fatal编程技术网

Javascript 如果数字在给定范围内,是否有一种简洁的方法返回用于对数字进行四舍五入的值?

Javascript 如果数字在给定范围内,是否有一种简洁的方法返回用于对数字进行四舍五入的值?,javascript,Javascript,我希望能够对一个数字进行四舍五入,但四舍五入的值取决于数字的大小 我有下面的代码,但是它不允许返回一个数字,当这个数字绝对是任意大小的时候,它可以用来取整,而且它也是非常重复的 有没有一种方法可以以更简洁的方式对其进行重构 const roundingsolution=(最大值:number):number=>{ 如果(最大值>0.1&&最大值0.5&&最大值1&&最大值5&&最大值10&&最大值50&&最大值100&&最大值500&&最大值1000&&最大值5000&&最大值10000&&最大

我希望能够对一个数字进行四舍五入,但四舍五入的值取决于数字的大小

我有下面的代码,但是它不允许返回一个数字,当这个数字绝对是任意大小的时候,它可以用来取整,而且它也是非常重复的

有没有一种方法可以以更简洁的方式对其进行重构

const roundingsolution=(最大值:number):number=>{

如果(最大值>0.1&&最大值0.5&&最大值1&&最大值5&&最大值10&&最大值50&&最大值100&&最大值500&&最大值1000&&最大值5000&&最大值10000&&最大值50000&&最大值关于使此更简洁,我建议执行以下操作:

const roundingResolution = (max: number): number => {
  if (max > 0.1 && max <= 0.5) return 0.05;
  if (max <= 1) return 0.1;
  if (max <= 5) return 0.5;
  if (max <= 10) return 1;
  if (max <= 50) return 5;
  if (max <= 100) return 10;
  if (max <= 500) return 50;
  if (max <= 1000) return 100;
  if (max <= 5000) return 500;
  if (max <= 10000) return 1000;
  if (max <= 50000) return 5000;
  if (max <= 100000) return 10000;
  return 1;
};

const resolution = roundingResolution(value);

const roundedValue = Math.ceil(value / resolution) * resolution;
const roundingsolution=(最大值:number):number=>{

如果(max>0.1&&max我不知道语义,我只是重构了你的代码,我想这就是你想要的

const roundingsolution=max=>{
函数*范围(){
设x=0.1;
while(true){
收益率[x,x*5];
x*=5;
收益率[x,x*2];
x*=2;
}
}
阈值=100000;
for(让[下限,上限]的范围(){
如果(上限>阈值)返回1;

如果(max>lower&&maxroundInSolution可以用更通用的方式编写,如下面的代码所示:

var roundingResolution = (max: number): number => {
    if (max <= 0.1 || max > A_max_number) return 1; //?
    var logValue = Math.log10(max);
    var base = Math.floor(logValue);
    var pow10 = Math.pow(10, base);
    var mod = max/pow10;
    if( mod > 5)
    {
        return pow10;
    } else
    { 
        return pow10/2;
    }
}
var roundingsolution=(最大值:number):number=>{
if(max A_max_number)返回1;/?
var logValue=数学对数10(最大值);
var基数=数学下限(对数值);
var pow10=数学pow(10,基准);
var mod=最大功率/功率10;
如果(mod>5)
{
返回pow10;
}否则
{ 
返回功率10/2;
}
}
我们的想法是从公式中得到mod和base:max=mod*10^base

使用
math.log10()
获得数字的大小,然后与该大小的
5
10
的倍数进行比较,返回适当的上限

const roundingsolution=(max)=>{
设pow10=Math.pow(10,Math.ceil(Math.log10(max));
如果(最大功率<10/2){
返回pow10/20;
}否则{
返回pow10/10;
}
}

控制台日志(圆形解决方案(700))
您有一个单独的问题。您只测试
您不能在这里尝试迭代或递归尝试吗?我也不认为您的条件会像预期的那样工作,1,5,10,50…50000,您使用小于5,大于5,但不是5,与其他示例相同。您的逻辑有一个模式,5和10的倍数,您可以尝试使用modulas运算符。@Barmar-true!谢谢并updated@Mr.RobotReturn
1
因为你不能除以0,这个解决方案在你的答案中有效,也比迭代/递归快得多,我用910239182381723482834823481712784测试它,得到1e+27,所以10000000000000000000你可以算出它,这是accurate或否。谢谢你@Barmer,但是结果似乎被10的因子所抵消了?我没有注意到你在结果中被10除了。所以它并不是真正的四舍五入数字。谢谢@Linh Nguyen,但是如果
max
是3,那么它返回0.5,如果
max
是4,那么它返回1,这与我的示例不同。@Robot先生抱歉,我太快了。我只是更新了计算并添加了解释