簡體   English   中英

使用JavaScript將比率轉換為百分比

[英]Convert Ratio to Percentage using JavaScript

我正在編寫腳本以支持Web應用程序顯示圖像,並允許用戶縮放/平移以查看更多細節。 使用JavaScript編寫的腳本支持默認的縮放級別,介於0%和100%之間,其中0%表示縮小后的圖像大小以適合瀏覽器窗口,而100%表示全分辨率的圖像。 以下公式用於獲取給定的百分比,並使用正確的默認縮放級別顯示圖像。 在公式下方是一些用於確保其正常運行的計算。 注意,比率代表圖像之間的大小差異。

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

我的問題是,如果用戶更改縮放級別,我想簡短地顯示縮放級別,但是需要將比率轉換為百分比。 棘手的部分是,所有內容都是相反的,其中1(固定)始終代表完整尺寸的圖像,因為它的尺寸比為1:1。 較大的數字表示兩個圖像之間的大小差異,表示為轉換為小數的比率(變量)。

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 = ?

最后,我已經廣泛搜索了答案,但無濟於事。 誰能幫我找到解決方案?

更新:我的答案很接近,除了結果是相反的。 在此應用中,由於在計算中使用了比率,所以越來越少。 另外,在我的第一個示例中還不清楚,但是Y和Z是變量,而X是固定的。 由於Y表示可變的圖像比率,因此在初始化期間它始終與X相同,因為用戶尚未更改圖像大小。

在以下示例中,X = 3.290,Y在1和3.290之間變化,其中3.290應該代表0%,而1應該代表100%

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

(3.290 - 1) / (3.290 - 1) * 100 = 100.0%
(3.235 - 1) / (3.290 - 1) * 100 = 097.5%
(2.280 - 1) / (3.290 - 1) * 100 = 055.8%
(2.230 - 1) / (3.290 - 1) * 100 = 053.7%
(2.145 - 1) / (3.290 - 1) * 100 = 050.0%
(1.830 - 1) / (3.290 - 1) * 100 = 036.2%
(1.660 - 1) / (3.290 - 1) * 100 = 028.8%
(1.100 - 1) / (3.290 - 1) * 100 = 004.3%
(1.010 - 1) / (3.290 - 1) * 100 = 000.4%
(1.000 - 1) / (3.290 - 1) * 100 = 000.0%

對於Z而言,簡單地求解X /(((Y-1)* Z)+ 1)= N是完全正確的,但沒有太大幫助,因為您的結果(即N)是四舍五入的。

讓我們以最后一個為例:

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

這是不正確的,結果為329/23000或十進制:0.014 30434782608695652173913043478260869565217391(空格后的序列無限重復),因此N = 0.01的(X-N)/(N *(Y-1))得出32800 /十進制229或大約143.2314410,這與預期的100.0相差50%!

沒有簡單的解決方案。 可能最簡單的方法是對列表使用更多的數字,並舍入到兩位數字的精度(例如,使用toFixed() ),以使用戶感到厭惡。

最復雜的是到處使用理性,也就是說,我自由地接受它,而我卻毫不羞愧地承認了我的實現方式。

我通過使用以下公式計算百分比的倒數來解決我的問題。

((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%

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM