2015-06-19 126 views
0

我必须缺少一些东西,但是当我尝试从double创建BigRational0.1时,它给了我一个非常长的无意义值。将其转换回给0.0将double(0.1)转换为BigRational并返回

double d = 0.1;      // 0.1 
BigRational br = new BigRational(d); // 3602879701896397/71213961919824440... 
double d2 = (double)br;    // 0.0 

我缺少什么?我知道0.1不能完全代表System.Double,但是BigRational肯定可以近似于它的往返行程吗?

+0

将其转换为小数点即可。他们在文档中有些注意。为什么是双重必要的? – Jonesopolis

+0

@Jonesy因为我想在接受任何有限的'double'的代码中使用它。我在问题中使用了0.1作为示例,因为这是我发现问题的方式。 – kcnygaard

+1

这已经是大约一年前的一个已知问题:http://bcl.codeplex.com/workitem/13051。检查BigRational的当前代码库是否已经包含错误修复。如果不是这样,一个关于这个问题的评论者提供了一个解决方案(我不使用BigRational,我不知道评论者提出的修复是否会真正起作用......) – elgonzo

回答