向上/向下舍入公式的元素,直到结果为整数

时间:2012-05-19 21:10:48

标签: javascript math formula

我想向上或向下舍入a,直到结果为整数。

a = 1.2
b = 1.5
a*b*16 = 28.8

但是,我有一个标准:a必须固定为不超过3个小数位。所以我需要一个计算,上面的例子将输出到这个:

a = 1.25
b = 1.5
a*b*16 = 30

我实际上是用Sass编写代码,但是如果有人能指出我正确的方向,无论是用JavaScript还是其他方式编写的。我只需要帮助制定这种令人困惑的计算!

标准: a 必须不超过 3个小数位 the result 必须是整数

这甚至可能吗?

2 个答案:

答案 0 :(得分:2)

如果限制变量的精度,无论使用何种方法,都无法保证结果为整数。

<强>示例:

  • 如果b = 3,则a = 30 /(16×3)= 30/48 = 5/8 = 0.625
    在这种情况下,0.625×3×16 = 30。

  • 如果b = 7,则a = 30 /(16×7)= 30/112 = 15/56 = 0.267857 ...
    舍入a得到0.268和0.268×7×16 = 30.016,这是你可以达到最接近30的值。换句话说,没有a的值将满足标准,0.268是你能做的最好的。

但是你可以求解最佳值,使结果尽可能接近整数。

求解所需变量的等式,然后舍入到适当的小数位数。

a = 30. / (16. * b); // true value
a = ((int) (1000 * a + 0.5)) / 1000; // round to 3 decimals

大多数现代语言都提供库函数来为您进行舍入;我把它写成“长手”,这样你就可以理解它是如何工作的。

答案 1 :(得分:0)

i = Math.round(a*b*16);
a = i/b/16;
a = a.toFixed(2);
b = i/16/a;

测试om i == a * b * 16