2009-03-19 35 views
177

Làm cách nào để chia hai số nguyên để nhận được gấp đôi?Làm thế nào tôi có thể chia hai số nguyên để có được gấp đôi?

+9

Giả sử này đã được hỏi trong một cuộc phỏng vấn - phân chia số nguyên luôn dẫn đến số nguyên. Bạn phải sử dụng kiểu truyền như kiểu được hiển thị bên dưới. – Sesh

+2

Các loại phân chia khác nhau: Số nguyên, Dấu chấm động, Số thập phân phân tách trong [Tại sao phân số nguyên trong C# trả về số nguyên nhưng không phải là dấu phẩy?] (// stackoverflow.com/q/10851273) –

Trả lời

313

Bạn muốn đúc những con số:

double num3 = (double)num1/(double)num2; 

Lưu ý: Nếu bất kỳ đối số trong C# là một double, một chia double được sử dụng mà kết quả trong một double. Vì vậy, sau đây sẽ làm việc quá:

double num3 = (double)num1/num2; 

Để biết thêm thông tin xem:

Dot Net Perls

+2

Không biết nếu điều này là giống nhau trong C#, nhưng C chỉ yêu cầu bạn bỏ đầu tiên - nó sẽ tự động tạo gấp đôi/int một đôi. – paxdiablo

+3

@Pax, Nếu bất kỳ của các arg trong C hoặc C# là một đôi, một chia đôi được sử dụng (dẫn đến một đôi). – strager

+14

Cẩn thận không làm điều này: - 'double num3 = (double) (num1/num2);'. Điều này sẽ chỉ cung cấp cho bạn một đại diện kép của kết quả phân chia số nguyên! –

5

Chuyển đổi một người trong số họ thành người đầu tiên gấp đôi. Biểu mẫu này hoạt động bằng nhiều ngôn ngữ:

real_result = (int_numerator + 0.0)/int_denominator 
+4

không phải là mã dễ đọc nhất mặc dù –

+0

Dễ dàng hơn để làm ... 'var result = 1.0 * a/b;' – Basic

+0

@Basic có 100 cách để làm điều đó. Tôi thích bổ sung chỉ vì nó nhanh hơn, mặc dù đúc rõ ràng là nhanh hơn. –

10

truyền số nguyên để tăng gấp đôi.

+0

Để cụ thể, bạn có thể đúc một số nguyên thành số double như sau: (double) myIntegerValue – Whiplash

16

Bổ sung câu trả lời của @ NoahD của

Để có một độ chính xác cao hơn bạn có thể đúc đến chữ số thập phân:

(decimal)100/863 
//0.1158748551564310544611819235 

Hoặc:

Decimal.Divide(100, 863) 
//0.1158748551564310544611819235 

đúp có một độ chính xác 64 bit trong khi số thập phân có 128

(double)100/863 
//0.11587485515643106 
0
var firstNumber=5000, 
secondeNumber=37; 

var decimalResult = decimal.Divide(firstNumber,secondeNumber); 

Console.WriteLine(decimalResult); 
+1

Câu hỏi dường như gọi là 'double' và không phải là 'thập phân'. –

Các vấn đề liên quan