【发布时间】:2015-05-12 08:54:51
【问题描述】:
我想返回小数的小数,但如果函数花费太多时间,函数必须放弃。我试过这个,但它不起作用......我可能做错了什么。你能告诉我我的错误吗?
String decimalToFractional(double d) async {
var df = 1.0;
var top = 1;
var bot = 1;
var future = new Future<String>(() {
while (df != d) {
if (df < d) {
top += 1;
} else {
bot += 1;
top = (d * bot).toInt();
}
df = top / bot;
}
return new Future.value('$top/$bot');
});
future.timeout(new Duration(seconds: 2), onTimeout: () => new Future.value(d.toString()));
return await future;
}
【问题讨论】:
-
到底是怎么不工作的?
-
我得到了一个未来的实例而不是一个值。
-
近距离投票完全没有必要。这个问题很清楚,很适合 StackOverflow。
-
您正试图用分数来近似双精度数。由于所有双精度值都是二进制值,因此它们始终是 2 的幂的分数。如果您想要一个不精确但足够接近的近似值,从 int/2^n 分数开始可能会更快,而不是从头开始.无论如何,您可能会失去乘法和除法的精度。
-
@Irn 我不太明白,你能举个例子吗?
标签: dart dart-async