BigDecimal
là một lớp học trong gói java.math
có nhiều lợi ích để xử lý các số lớn của một quy mô nhất định. Có một lớp hoặc kiểu dữ liệu tương đương trong C# với tính năng này không.Tương đương với lớp Java BigDecimal trong C# là gì?
Trả lời
C# chỉ có BigInteger
xây dựng nó (trong khuôn khổ .NET 4).
Có phải decimal
đủ chính xác cho công việc của bạn không? Đó là số 128 bit có thể chứa các giá trị trong phạm vi ± 1.0 × 10 −28 đến ± 7.9 × 10 .
Lớp BigRational cũng bật theo cách của nó. Hiện đang ở giai đoạn beta. –
@RaheelKhan bạn có ý gì không? https://msdn.microsoft.com/de-de/library/microsoft.solverfoundation.common.rational(v=vs.93).aspx –
@JanusTroelsen Không, anh ấy thực sự có nghĩa là http://bcl.codeplex.com/ release/view/42782 – MrCC
Vâng, ngoài việc sử dụng thư viện của bên thứ ba với sự hỗ trợ của BigDecimal (nếu chúng tồn tại), không có cách giải quyết dễ dàng. Cách dễ dàng nhất, như xa như tôi đang quan tâm là phải thực hiện một số thập phân (từ mono ví dụ) và để viết lại nó bằng cách sử dụng loại BigInteger. Trong nội bộ, trong thực hiện của mono, loại thập phân được tạo thành từ ba số nguyên. Vì vậy, tôi không nghĩ rằng sẽ khó thực hiện. Tôi không chắc chắn về hiệu quả mặc dù. Tuy nhiên, trước tiên bạn nên xem xét sử dụng loại thập phân chuẩn như codeka được đề cập.
Đây là thư viện C# thực hiện những gì bạn đang tìm kiếm và trong một số trường hợp có chức năng bổ sung: http://www.fractal-landscapes.co.uk/bigint.html (hoặc thử tại http://web.archive.org/web/20110721173046/http://www.fractal-landscapes.co.uk/bigint.html).
Ví dụ, nó có một chức năng căn bậc hai, mà BigDecimal không có:
PrecisionSpec precision = new PrecisionSpec(1024, PrecisionSpec.BaseType.BIN);
BigFloat bf = new BigFloat(13, precision);
bf.Sqrt();
Console.WriteLine(bf.ToString());
Wikipedia có một danh sách các thư viện khác như tại http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic#Libraries
404: Thư viện không còn khả dụng? – Shlomo
Đã thêm liên kết archive.org. – RedGreenCode
Liên kết đã chết và archive.org không giữ các tệp zip mã nguồn. – kristianp
Chỉ gần đây tôi cũng cần một độ chính xác tùy ý số thập phân trong C# và đi qua ý tưởng được đăng tại đây: https://stackoverflow.com/a/4524254/804614
Sau đó tôi hoàn thành dự thảo để hỗ trợ tất cả toán tử số học và so sánh cơ bản, cũng như chuyển đổi đến và từ tất cả các số điển hình ical các loại và một vài phương pháp mũ, mà tôi cần thiết tại thời điểm đó.
Nó chắc chắn không phải là toàn diện, nhưng rất chức năng và hầu như sẵn sàng để sử dụng. Vì đây là kết quả của một đêm mã hóa, tôi không thể đảm bảo rằng điều này là lỗi miễn phí hoặc hoàn toàn chính xác, nhưng nó làm việc tuyệt vời cho tôi. Dù sao, tôi muốn xuất bản nó ở đây vì tôi không tìm cách nào khác để sử dụng các số thập phân chính xác tùy ý trong C# mà không cần phải bao gồm các thư viện khổng lồ (hầu hết không phải là .net, nhưng trình bao bọc cho C++), đi kèm với tất cả các loại không cần thiết đồ đạc.
Ý tưởng cơ bản là xây dựng một loại dấu phẩy động tùy chỉnh với một mantissa lớn tùy ý sử dụng loại BigInteger của .NET 4.0 và số mũ cơ sở 10 (Int32).
Nếu bạn tìm thấy lỗi/không chính xác, có đề xuất hoặc bất kỳ điều gì mang tính xây dựng, vui lòng chỉnh sửa bài đăng trực tiếp hoặc để lại nhận xét để tôi có thể cải thiện câu trả lời.
Tôi không hoàn toàn chắc chắn nếu đây là nơi tốt nhất để đặt điều này, nhưng đây là một trong những câu hỏi hàng đầu về SO về chủ đề này và tôi thực sự muốn chia sẻ giải pháp của tôi.;)
EDIT: Tôi chuyển việc thực hiện để GitHubGist: https://gist.github.com/JcBernack/0b4eef59ca97ee931a2f45542b9ff06d
Công việc tuyệt vời! Điều này có ích cho nỗ lực tính toán PI của tôi. – vbocan
Điều này thật tuyệt. Một gợi ý tôi có thể thực hiện không phải là phủ nhận phần định trị trong toán tử '-' đơn nhất của bạn, thay vào đó trả về một' BigDecimal' mới với phần tử phủ định phủ định, cho bất biến. Nếu không, bạn có thể thấy rằng 'BigDecimal x = 1.01, y = -x' có tác dụng không mong muốn của' x == y == -1.01'. – jimbobmcgee
@jimbobmcgee Đầu tiên tôi nghĩ rằng bạn đã đúng và đã chỉnh sửa câu trả lời, nhưng sau đó tôi nhận ra một lần nữa rằng 'BigDecimal' là một cấu trúc. Điều đó có nghĩa là đối số vào toán tử đơn nguyên đã là bản sao của bản gốc khiến nó không thể vô tình sửa đổi nó. – Gigo
Deveel Math
GitHub:
https://github.com/deveel/deveel-math
Author GitHub:
Hỗ trợ:
- BigComplex
- BigDecimal
- BigMath
- Rational
- ...
Làm thế nào để Cài đặt Nó
Từ NuGet Package Management Console, chọn dự án nơi thư viện sẽ được cài đặt và gõ lệnh sau
PM> Install-Package dmath
Tôi sẽ không tin thư viện này. Tôi đã có một số trường hợp một bổ sung thất bại với một lỗi "sức mạnh của 10 quá lớn" cũng như trường hợp khác bằng cách sử dụng BigDecimal nơi 0.5> 1e-20 trả về false –
Thư viện xuất sắc – user1018697
Điều này có thể không có được một lựa chọn khi câu hỏi ban đầu được đăng, nhưng một cách thực sự dễ dàng để sử dụng một BigDecimal
trong C# mã của bạn là cài đặt gói IKVM.NET qua NuGet:
PM> Install-Package IKVM
Sau đó, thực hiện chính xác như bạn làm trong Java:
using System;
using java.math;
namespace BigDecimalDemo
{
class Program
{
static void Main(string[] args)
{
int n = int.Parse(args[0]);
Console.WriteLine(Factorial(n));
}
static BigDecimal Factorial(int n)
{
return n == 1
? BigDecimal.ONE
: Factorial(n - 1).multiply(new BigDecimal(n));
}
}
}
Tùy thuộc vào cách xa bạn đi với IKVM có thể có vấn đề interop thỉnh thoảng để vấp ngã nhưng theo kinh nghiệm của tôi, nó thường hoạt động tốt cho những thứ đơn giản như thế này.
IKVM là công cụ tuyệt vời để đưa mã java vào một dự án C# , nhưng việc thêm toàn bộ thư viện lớp java vào dự án của bạn chỉ để mang lại một lớp tương đối đơn giản có vẻ quá mức cần thiết. – Sprotty
- 1. Có tương đương C++ với BigDecimal của Java không?
- 2. Tương đương với LinkedHashSet (Java) trong C# là gì?
- 3. C# tương đương với isInstance của Java() là gì?
- 4. JVM tương đương trong C# là gì?
- 5. tương đương C# tĩnh của {...} trong Java là gì?
- 6. Tương đương với mới/xóa C++ trong C là gì?
- 7. Tương đương với Math.abs() trong Mục tiêu-C là gì?
- 8. Tương đương với Thread.SetApartmentState trong C++ là gì?
- 9. Tương đương với C# ObservableCollection trong Java
- 10. Clojure tương đương với Overriding "bằng" trong java là gì?
- 11. Tương đương với System.out.println() của Java trong Javascript là gì?
- 12. C# tương đương với Iterator trong Java
- 13. Tương đương C# của Java DecimalFormat là gì?
- 14. Tương đương với C# của java.util.regex là gì?
- 15. Tương đương với C++ map.lower_bound trong Java
- 16. Java tương đương với loại lớp động C#?
- 17. Tương đương với bigint trong C# là gì?
- 18. Tương đương với C++ cho AutoResetEvent trong Linux là gì?
- 19. Tương đương với NSDictionary trong C# là gì?
- 20. C# tương đương với "self ::" của PHP là gì?
- 21. C# tương đương với dynamic_cast của C++ là gì?
- 22. Tương đương Java cho mã C# sau là gì?
- 23. C tương đương với câu lệnh cin C++ là gì?
- 24. C++ tương đương với Java này
- 25. C# tương đương với tài nguyên Java
- 26. Scala tương đương với ClassName.class của Java là gì?
- 27. Tương đương với Ruby cho StringReader của Java là gì?
- 28. Java tương đương với PHP var_dump là gì?
- 29. Tương đương C# của MsgWaitForMultipleObjects là gì?
- 30. Chức năng 'nth_element' tương đương trong Java là gì?
Bản sao có thể có của [Có lớp BigFloat trong C# không?] (Http://stackoverflow.com/questions/10359372/is-there-a-bigfloat-class-in-c) –