2012-07-14 29 views
0

我目前正在編寫一個程序,需要預覽實時顯示,但預覽當然會縮小比例。但是,當我縮小PictureBox時,尺寸不正確。爲了使標尺正確,寬度和高度需要爲4:3的比例。下面的代碼:除以兩個整數不會返回預期結果

private void FindOptimalRes(PictureBox picBox) 
{ 
    double h = Height/4; 
    double ratio = 4/3; 
    picBox.Size = new Size((int)(h * ratio), (int)h); 
} 

在測試中,Height(表格的高度)爲400,所以,新尺寸的寬度應爲133,但它總是被調整到100 × 100!爲什麼?

+5

你應該確保你說錯了之前說C#有一個數學錯誤 – 2012-07-14 21:44:07

+3

爲什麼這個問題downvoted?僅僅因爲某人不瞭解某件事情並不是降低他的問題的理由。他甚至展示了他的代碼和一切。 – 2012-07-14 21:44:35

+2

我想,也許是:「試着選擇一個更準確/問題反映和較不好鬥的標題..」 – 2012-07-14 21:54:11

回答

4

43都是int s,所以它變成了1。讓他們的東西浮點:

double ratio = 4.0/3.0; 

請注意,你也Height犯同樣的錯誤(也不要緊,現在,但它會 - 將其更改爲4.0)。如果這是實際的代碼,爲什麼再除以四乘以四呢?

private void FindOptimalRes(PictureBox picBox) 
{ 
    picBox.Size = new Size(Height/3, Height/4); 
} 
3

C#的數學是「正確的」。是做什麼工作的理解是..失蹤:-)

表達4/3(的int/int型),因爲它是用整數除法將評估在整數值1(兩個操作數整數)。結果1然後在賦值時被隱式強制爲雙值。

在另一方面4d/3將(在 1.333_和結果)的「工作」,因爲現在是double/int - 使用適當的浮點除法>double - >double/double (by promotion)

同樣,對於Height/4(假設身高爲整數),這將工作:

(double)Height/4   // double/int -> double 
Height/4d     // int/double -> double 
(double)Height/(double)4 // double/double -> double 

編碼愉快!

+1

爲了記錄,我知道C#的數學是正確的。自從我在C#編程之後的一般時間和將近一年的時間裏開始編寫程序已經有一段時間了,所以我只是忘記了這個小規則。但是,謝謝你的正確答案,並提醒我這一點。 :P – 2012-07-14 22:10:22

0

也許你應該做一個小數除法,而不是整數除法:

double h = Height/4.0; 
double ratio = 4/3.0; 

如果C#數學是關閉很多事情在世界各地將關閉爲好。

3

你正在做的整數除法:

double ratio = 4/3; // evaluates to 1 

這會不會給你你正在尋找的,因爲小數點被截斷的值,從而評估對1而不是1.333。至少有一個操作數必須是雙:

double ratio = 4.0/3.0; // evaluates to 1.333 

也是一樣的Height。將4更改爲4.0

+0

謝謝。你意識到我是在開玩笑C#的數學被忽略,你給了我一個直接的(和正確的)答案。 :) – 2012-07-14 21:49:32

2

確保選中劃分結果是double

double ratio = (double) 4/3; // double division 

,並沒有必要設置你的輸入值的兩倍。

var num1 = // an integer number 
var num2 = // an integer number 

//result is integer, because of integer/integer uses 'integer division' 
double result = num1/num2; 

//result is double , because of you forced to 'double division' 
double result = (double) num1/num2; 
0

你在做整數除法。

你需要做的是這樣的:

private void FindOptimalRes(PictureBox picBox) 
{ 
    double h = Height/4D; // or Height/4.0 
    double ratio = 4D/3D; // or 4.0/3.0 
    picBox.Size = new Size((int)(h * ratio), (int)h); // Size is now correct [133,100] 
} 

當你做一個數學運算與字面整數(沒有小數位),它是隱式類型爲int。

只需在文字(4D,3D)的末尾添加大寫字母D將會將它們鍵入爲雙精度,並且您的數學運算正確。或者你可以寫4.0,3.0