Làm thế nào tôi có thể chia hai số nguyên để có được một đôi?


282

Làm cách nào để chia hai số nguyên để có được một số kép?


10
Giả sử điều này đã được hỏi trong một cuộc phỏng vấn - phép chia số nguyên luôn cho kết quả là số nguyên. Bạn phải sử dụng một loại diễn viên như những người được hiển thị dưới đây.
Sesh

2
Các loại phân chia khác nhau: Số nguyên, Dấu phẩy động, Số thập phân -discussed trong Tại sao phép chia số nguyên trong c # trả về một số nguyên nhưng không phải là số float?
Michael Freidgeim

Câu trả lời:


460

Bạn muốn bỏ số:

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

Lưu ý: Nếu bất kỳ đối số nào trong C # là a double, thì phép doublechia được sử dụng dẫn đến a double. Vì vậy, những điều sau đây cũng sẽ làm việc:

double num3 = (double)num1/num2;

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

Dot Net Perls


3
Không biết điều này có giống với C # không, nhưng C chỉ yêu cầu bạn bỏ vai đầu tiên - nó sẽ tự động tăng gấp đôi / int thành gấp đôi.
paxdiablo

4
@Pax, Nếu bất kỳ đối số nào trong C hoặc C # là gấp đôi, thì phép chia đôi được sử dụng (kết quả là gấp đôi).
strager

32
Hãy 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ả của phép chia số nguyên!
Bộ giải mã cô đơn

Giả sử bạn không cần độ chính xác cao hơn, có lý do nào để doublethay thế floatkhông? Tôi có thể thấy các câu hỏi yêu cầu doublenhưng dù sao tôi cũng tò mò.
Kyle Delaney

@KyleDelaney Chỉ cần gây ra trong C # chúng ta thường sử dụng doublevà không float. Khi bạn viết một biến giống như vậy var a = 1.0;, 1.0 này luôn là a double. Tôi đoán đây là lý do chính.
đây là

31

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

Để có độ chính xác cao hơn, bạn có thể chuyển sang thập phân:

(decimal)100/863
//0.1158748551564310544611819235

Hoặc là:

Decimal.Divide(100, 863)
//0.1158748551564310544611819235

Double được biểu diễn phân bổ 64 bit trong khi số thập phân sử dụng 128

(double)100/863
//0.11587485515643106

Giải thích sâu về "độ chính xác"

Để biết thêm chi tiết về các đại diện dấu chấm động trong nhị phân và độ chính xác của nó hãy xem bài viết này từ Jon Skeet nơi ông nói về floatsdoublescái này nơi ông nói về decimals.


2
Sai lầm! doublecó độ chính xác là 53 bit, và đó là định dạng dấu phẩy động nhị phân , trong khi đó decimallà ... một số thập phân, tất nhiên, với độ chính xác 96 bit . Vì vậy, doublechính xác đến ~ 15-17 chữ số thập phân và số thập phân 28-29 chữ số (và không gấp đôi độ chính xác của double). Quan trọng hơn decimalthực tế chỉ sử dụng 102 trong số 128 bit
phuclv

Cảm ơn @phuclv, đã sửa nó. Tôi có nghĩa là "phân bổ không gian". Bạn đã đúng về độ chính xác của decimals(96), nhưng doubles52 bit mantissa , không phải 53.
Fabriciorissetto

1
vâng, mantissa có 52 bit, nhưng vẫn còn một bit ẩn, dẫn đến ý nghĩa 53 bit. Là 52 hay 53 bit độ chính xác của dấu phẩy động?
phuclv

Decimal.Divide thật tuyệt! Thx
Ricardo G Saraiva

10

đúc các số nguyên để nhân đôi.


Để cụ thể, bạn có thể truyền một số nguyên thành gấp đôi như vậy: (nhân đôi) myIntegerValue
Whiplash

5

Chuyển đổi một trong số họ thành một đôi đầu tiên. Hình thức này hoạt động trong nhiều ngôn ngữ:

 real_result = (int_numerator + 0.0) / int_denominator

1
Dễ dàng hơn để làm ...var result = 1.0 * a / b;
Cơ bản

@Basic có 100 cách để làm điều đó. Tôi thích sự bổ sung chỉ vì nó nhanh hơn, mặc dù việc truyền hình rõ ràng vẫn nhanh hơn.
Đánh dấu tiền chuộc

1
var firstNumber=5000,
secondeNumber=37;

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

Console.WriteLine(decimalResult );

1
Câu hỏi dường như gọi cho doublevà không decimal.
Kyle Delaney
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.