Làm thế nào để chuyển đổi số thập phân sang nhân đôi trong C #

694
Eggs McLaren 2008-08-01 11:42.

Tôi muốn sử dụng a Track-Barđể thay đổi Formđộ mờ của a.

Đây là mã của tôi:

decimal trans = trackBar1.Value / 5000;
this.Opacity = trans;

Khi tôi xây dựng ứng dụng, nó xuất hiện lỗi sau:

Không thể hoàn toàn chuyển đổi loại decimalthànhdouble

Tôi đã thử sử dụng transdouble, nhưng sau đó Controlkhông hoạt động. Mã này hoạt động tốt trong một dự án VB.NET trước đây.

14 answers

463
Kevin Dente 2008-08-01 12:17.

Diễn viên rõ ràng để doublethích điều này là không cần thiết:

double trans = (double) trackBar1.Value / 5000.0;

Việc xác định hằng số là 5000.0(hoặc as 5000d) là đủ:

double trans = trackBar1.Value / 5000.0;
double trans = trackBar1.Value / 5000d;
128
huseyint 2008-08-02 04:23.

Một câu trả lời chung chung hơn cho câu hỏi chung "Số thập phân so với Gấp đôi?":

Số thập phân dành cho các phép tính tiền tệ nhằm duy trì độ chính xác. Double dành cho các tính toán khoa học không bị ảnh hưởng bởi những khác biệt nhỏ. Vì Double là một kiểu dành riêng cho CPU (biểu diễn bên trong được lưu trữ trong cơ sở 2 ), các phép tính được thực hiện với Double sẽ hoạt động tốt hơn sau đó là Decimal (được biểu diễn trong cơ sở 10 bên trong).

86
Keith 2008-08-11 07:54.

Mã của bạn hoạt động tốt trong VB.NET vì nó ngầm thực hiện bất kỳ quá trình nào, trong khi C # có cả ẩn và rõ ràng.

Trong C #, việc chuyển đổi từ thập phân sang kép là rõ ràng vì bạn sẽ mất độ chính xác. Ví dụ: 1.1 không thể được biểu thị chính xác dưới dạng kép, nhưng có thể ở dạng thập phân (xem " Số dấu phẩy động - không chính xác hơn bạn nghĩ " để biết lý do tại sao).

Trong VB, trình biên dịch đã thêm chuyển đổi cho bạn:

decimal trans = trackBar1.Value / 5000m;
this.Opacity = (double) trans;

Điều đó (double)phải được nêu rõ ràng trong C #, nhưng có thể được ngụ ý bởi trình biên dịch 'tha thứ' hơn của VB.

82
Gordon Bell 2008-09-21 17:51.

Tại sao bạn lại chia cho 5000? Chỉ cần đặt giá trị Tối thiểu và Tối đa của TrackBar từ 0 đến 100, sau đó chia Giá trị cho 100 cho phần trăm Độ mờ. 20 ví dụ tối thiểu dưới đây ngăn biểu mẫu trở nên hoàn toàn ẩn:

private void Form1_Load(object sender, System.EventArgs e)
{
    TrackBar1.Minimum = 20;
    TrackBar1.Maximum = 100;

    TrackBar1.LargeChange = 10;
    TrackBar1.SmallChange = 1;
    TrackBar1.TickFrequency = 5;
}

private void TrackBar1_Scroll(object sender, System.EventArgs e)
{
    this.Opacity = TrackBar1.Value / 100;
}
64
tvanfosson 2009-02-28 01:45.

Bạn có hai vấn đề.

Thứ nhất, Opacityyêu cầu một giá trị kép, không phải một giá trị thập phân. Trình biên dịch cho bạn biết rằng mặc dù có sự chuyển đổi giữa thập phân và kép, nhưng đó là một chuyển đổi rõ ràng mà bạn cần chỉ định để nó hoạt động.

Thứ hai, TrackBar.Valuelà một giá trị số nguyên và việc chia một số nguyên cho một số int sẽ dẫn đến một số nguyên bất kể bạn gán biến nó cho loại biến nào. Trong trường hợp này, có một phép ép kiểu ngầm từ int sang thập phân hoặc kép, vì không mất độ chính xác khi bạn ép kiểu. Vì vậy, trình biên dịch không phàn nàn. Nhưng giá trị bạn nhận được luôn luôn là 0, có lẽ, vì trackBar.Valueluôn nhỏ hơn 5000.

Giải pháp là thay đổi mã của bạn để sử dụng double (kiểu gốc cho Opacity) và thực hiện số học dấu phẩy động bằng cách biến hằng số thành kép một cách rõ ràng, điều này sẽ có tác dụng thúc đẩy số học hoặc ép kiểu trackBar.Valuelên gấp đôi, điều này sẽ làm được điều tương tự hoặc cả hai. Bạn không cần biến trung gian trừ khi nó được sử dụng ở nơi khác. Tôi đoán là trình biên dịch sẽ tối ưu hóa nó đi.

trackBar.Opacity = (double)trackBar.Value / 5000.0;
60
andynil 2008-08-06 10:18.

Theo tôi, nó là mong muốn càng rõ ràng càng tốt. Điều này bổ sung thêm độ rõ ràng cho mã và hỗ trợ các lập trình viên đồng nghiệp của bạn, những người cuối cùng có thể đọc nó.

Ngoài (hoặc thay vì) thêm a .0vào số, bạn có thể sử dụng decimal.ToDouble().

Dưới đây là một số ví dụ:

// Example 1
double transperancy = trackBar1.Value/5000;
this.Opacity = decimal.ToDouble(transperancy);

// Example 2 - with inline temp
this.Opacity = decimal.ToDouble(trackBar1.Value/5000);
59
Ryan Fox 2008-08-02 03:53.

Nghe có vẻ như this.Opacitylà một giá trị kép và trình biên dịch không thích bạn cố gắng nhồi nhét một giá trị thập phân vào nó.

52
Darin Dimitrov 2011-09-01 09:08.

Các Opacity tài sản là loại kép:

double trans = trackBar1.Value / 5000.0;
this.Opacity = trans;

hoặc đơn giản:

this.Opacity = trackBar1.Value / 5000.0;

hoặc là:

this.Opacity = trackBar1.Value / 5000d;

Lưu ý rằng tôi đang sử dụng 5000.0(hoặc 5000d) để buộc chia đôi vì trackBar1.Valuelà một số nguyên và nó sẽ thực hiện phép chia số nguyên và kết quả sẽ là một số nguyên.

51
Dinah 2008-11-21 04:36.

Bạn nên sử dụng 5000.0thay vì 5000.

49
ChrisF 2011-09-01 09:09.

Giả sử bạn đang sử dụng WinForms, Form.Opacitylà loại double, vì vậy bạn nên sử dụng:

double trans = trackBar1.Value / 5000.0;
this.Opacity = trans;

Trừ khi bạn cần giá trị ở nơi khác, còn không thì viết đơn giản hơn:

this.Opacity = trackBar1.Value / 5000.0;

Lý do điều khiển không hoạt động khi bạn thay đổi mã của mình thành mã kép là vì bạn có:

double trans = trackbar1.Value / 5000;

được hiểu 5000là một số nguyên và vì trackbar1.Valuecũng là một số nguyên nên transgiá trị của bạn luôn bằng 0. Bằng cách biến số thành một giá trị dấu phẩy động một cách rõ ràng bằng cách thêm vào .0, trình biên dịch giờ đây có thể diễn giải nó thành một số kép và thực hiện phép tính thích hợp.

43
Danny Fox 2012-03-06 22:07.

Giải pháp tốt nhất là:

this.Opacity = decimal.ToDouble(trackBar1.Value/5000);
43
Darryl 2012-05-13 16:10.

Opacitylà một giá trị kép, tôi sẽ chỉ sử dụng một nhân đôi ngay từ đầu và không ép kiểu gì cả, nhưng hãy chắc chắn sử dụng một nhân đôi khi chia để bạn không mất bất kỳ độ chính xác nào

Opacity = trackBar1.Value / 5000.0;
38
Kolappan N 2013-04-12 05:08.
this.Opacity = trackBar1.Value / 5000d;

Thử cái này:

this.Opacity = decimal.ToDouble(trackBar1.Value / 5000.0);

Related questions

MORE COOL STUFF

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

8 công dụng tuyệt vời của Baking Soda và Giấm

8 công dụng tuyệt vời của Baking Soda và Giấm

Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.

Một thương hiệu kế thừa khác có được cuộc sống mới khi những người chủ mới của Black Opal có được Hội chợ thời trang

Một thương hiệu kế thừa khác có được cuộc sống mới khi những người chủ mới của Black Opal có được Hội chợ thời trang

Desiree Rogers, trái, và Cheryl Mayberry McKissack Chuyển sang, Fenty Beauty và Pat McGrath, có một đế chế làm đẹp mới do phụ nữ làm chủ đang trỗi dậy. Sau thương vụ mua lại mỹ phẩm Black Opal vào tháng 9, đội ngũ quyền lực của Giám đốc điều hành công ty Desiree Rogers và Chủ tịch Cheryl Mayberry McKissack đã thông báo mua lại thương hiệu làm đẹp tiên phong Fashion Fair từ người sáng lập Johnson Publishing Company (JPC).

Ngoài việc trở nên vô nghĩa, các bên bộc lộ giới tính giờ đây đã trở nên chết người

Ngoài việc trở nên vô nghĩa, các bên bộc lộ giới tính giờ đây đã trở nên chết người

Đối với những người có quá nhiều thời gian, tiệc tiết lộ giới tính là một cách thú vị để không cần áp đặt những định kiến ​​hạn chế lên thai nhi trước một đối tượng bạn bè giả vờ quan tâm một cách lịch sự. Tuy nhiên, việc chỉ dựa vào những chiếc bánh nướng có màu nhân tạo để biểu thị một tiếng hoo-ha hoặc một đứa trẻ đi tè đã trở nên xa xỉ trong các bậc cha mẹ trên Instagram.

Kirstjen Nielsen đang cố gắng đổi mới bản thân với tư cách là một người phụ nữ 'nói ra sự thật cho sức mạnh'

Kirstjen Nielsen đang cố gắng đổi mới bản thân với tư cách là một người phụ nữ 'nói ra sự thật cho sức mạnh'

Hôm thứ Tư, cựu Bộ trưởng An ninh Nội địa Kirstjen Nielsen vì một lý do nào đó đã được đưa ra một diễn đàn để phát biểu tại Hội nghị thượng đỉnh Những người phụ nữ quyền lực nhất của Fortune. Và có thể đoán trước được, người phụ nữ giám sát các nỗ lực (đang diễn ra) của chính quyền Trump nhằm chia cắt các gia đình ở biên giới đã sử dụng thời gian của mình như một cơ hội để tự bảo vệ mình và tự nhận mình là người — và hãy hít thở sâu ở đây — “đã nói sự thật với quyền lực.

Toyota Racing Development sẽ cho ra mắt Supra 3000GT Concept, Massive Wing vào tháng tới

Toyota Racing Development sẽ cho ra mắt Supra 3000GT Concept, Massive Wing vào tháng tới

Vì thế hệ mới nhất của chiếc xe điều chỉnh được yêu thích trên thế giới hiện đã có mặt tại đây, nên chỉ có điều kiện là Toyota Racing Development sẽ đưa phiên bản Supra thế hệ thứ năm sửa đổi của riêng mình đến SEMA vào tháng tới. Toyota đã cho chúng tôi một gợi ý về những gì sẽ xảy ra trong tuần này: một chiếc Concept GR Supra 3000GT hiện đại.

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Vụ kiện, nêu tên một số học khu, lập luận rằng dự luật "Không nói đồng tính" được ban hành gần đây của Florida "có hiệu quả im lặng và xóa bỏ học sinh và gia đình LGBTQ +"

Đường băng hạ cánh

Đường băng hạ cánh

Cuối hè đầu thu là mùa hoài niệm. Những chiếc đèn đường chiếu ánh sáng của chúng qua những con đường đẫm mưa, và những chiếc lá dưới chân - màu đỏ cam tắt trong bóng chạng vạng - là lời nhắc nhở về những ngày đã qua.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Tôi ghét từ "tàu đắm". Mọi người cảm thấy thoải mái trong la bàn đạo đức của riêng mình, và khi làm như vậy, họ thấy mình vượt qua sự phán xét.

Language