0

我想向上或向下舍入,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必须是整数

这甚至可能吗?

4

2 回答 2

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

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

于 2012-05-19T21:13:52.097 回答
0
i = Math.round(a*b*16);
a = i/b/16;
a = a.toFixed(2);
b = i/16/a;

测试 om i==a*b*16

于 2012-05-19T21:20:14.187 回答