使用JavaScript将比率转换为百分比

时间:2015-10-11 13:36:58

标签: javascript image

我正在编写脚本以支持Web应用程序显示图像并允许用户缩放/平移以查看更多细节。使用JavaScript编写的脚本支持0%到100%之间的默认缩放级别,其中0%表示缩小到适合浏览器窗口后的图像大小,100%表示全分辨率下的图像。以下公式用于获取给定百分比并使用正确的默认缩放级别显示图像。公式下面是我用来确保其正常运行的一些计算。请注意,比率表示图像之间的大小差异。

int

我的问题是,如果用户更改了缩放级别,我想简要显示缩放级别,但需要将比率转换为百分比。棘手的部分是一切都是颠倒的,其中1(固定)总是代表全尺寸图像,因为它的尺寸比是1:1。较大的数字表示两个图像之间的大小差异,表示为转换为小数的比率(变化)。

X / (((Y - 1) * Z) + 1)

X = Ratio 1
Y = Ratio 2
Z = Percentage as Decimal

3.29 / (((3.29 - 1) * 000.00) + 1) = 3.29
3.29 / (((3.29 - 1) * 000.01) + 1) = 3.22
3.29 / (((3.29 - 1) * 000.10) + 1) = 2.67
3.29 / (((3.29 - 1) * 000.90) + 1) = 1.07
3.29 / (((3.29 - 1) * 001.00) + 1) = 1.00
3.29 / (((3.29 - 1) * 001.50) + 1) = 0.74
3.29 / (((3.29 - 1) * 002.00) + 1) = 0.58
3.29 / (((3.29 - 1) * 003.00) + 1) = 0.42
3.29 / (((3.29 - 1) * 004.00) + 1) = 0.32
3.29 / (((3.29 - 1) * 005.00) + 1) = 0.26
3.29 / (((3.29 - 1) * 010.00) + 1) = 0.13
3.29 / (((3.29 - 1) * 025.00) + 1) = 0.05
3.29 / (((3.29 - 1) * 050.00) + 1) = 0.03
3.29 / (((3.29 - 1) * 075.00) + 1) = 0.02
3.29 / (((3.29 - 1) * 100.00) + 1) = 0.01

最后,我已经广泛搜索了答案,但无济于事。任何人都可以帮我找到解决方案吗?

更新 我接近答案,但结果是倒置的。在该应用中,由于在计算中使用的比率,越少越多越少。此外,在我的第一个例子中并不清楚,但Y和Z是可变的,X是固定的。由于Y表示可变图像比率,因此在初始化期间它始终与X相同,因为用户尚未更改图像大小。

在以下示例中,X = 3.290,Y在1到3.290之间变化,其中3.290应代表0%,1应代表100%

Case 1:
3.290 = 0% (no zoom)
2.145 = 50%
1.000 = 100% (max zoom)
------------
1.183 = ?

Case 2:
5.470 = 0%
3.235 = 50%
1.000 = 100%
------------
4.680 = ?

Case 3:
7.630 = 0%
4.317 = 50%
1.000 = 100%
------------
3.745 = ?

2 个答案:

答案 0 :(得分:0)

简单地求解X /(((Y - 1)* Z)+ 1)= N的N是完全正确但没有多大帮助,因为你的结果,即N是四舍五入的。

让我们以最后一个为例:

3.29 /(((3.29-1)* 100.00)+ 1)= 0.01

这是不正确的,结果是329/23000或十进制:0.014 30434782608695652173913043478260869565217391(空格无限重复后的序列),所以(X - N)/(N *(Y - 1)),N = 0.01给出了32800/229或大约143.2314410的十进制数,这是预期的100.0,接近50%!

没有简单的解决方案。可能最简单的方法是使用更多的数字作为列表并舍入到两位数的精度(例如:toFixed())以供用户厌恶。

最复杂的是全部使用理性,也就是说,我承认它是自由而且没有任何耻辱,就像我一样。

答案 1 :(得分:0)

我通过使用以下公式计算百分比的倒数来解决我的问题。

((X - 1) - (Y - 1)) / (X - 1) * 100 = Z

((3.290 - 1) - (3.290 - 1)) / (3.290 - 1) * 100 = 000.0%
((3.290 - 1) - (3.235 - 1)) / (3.290 - 1) * 100 = 002.4%
((3.290 - 1) - (2.280 - 1)) / (3.290 - 1) * 100 = 044.1%
((3.290 - 1) - (2.230 - 1)) / (3.290 - 1) * 100 = 046.3%
((3.290 - 1) - (2.145 - 1)) / (3.290 - 1) * 100 = 050.0%
((3.290 - 1) - (1.830 - 1)) / (3.290 - 1) * 100 = 063.8%
((3.290 - 1) - (1.660 - 1)) / (3.290 - 1) * 100 = 071.2%
((3.290 - 1) - (1.100 - 1)) / (3.290 - 1) * 100 = 095.6%
((3.290 - 1) - (1.010 - 1)) / (3.290 - 1) * 100 = 099.6%
((3.290 - 1) - (1.000 - 1)) / (3.290 - 1) * 100 = 100.0%