如何摆脱球拍中的浮点?

时间:2017-09-19 03:24:49

标签: racket

我有这个表达:

 $('#StartDate').daterangepicker({
            singleDatePicker: true,
            locale: { format: "DD-MM-YYYY" }
        },
         function (start, end, label) {
             var selectedDate = start._d;
             var EndMonthDate = new Date(selectedDate.getFullYear(), selectedDate.getMonth() + 1, 0);
             EndMonthDate = EndMonthDate .getDate() + '/' + (EndMonthDate .getMonth() + 1) + '/' + EndMonthDate .getFullYear();
             $('#EndDate').daterangepicker({
                 singleDatePicker: true,
                 startDate: EndMonthDate 
             });
         });

评估为:

 (floor (sqrt 2))

如何摆脱浮点位并使其仅生成1,如何将其转换为整数类型。我查看了文档,但一无所获。感谢。

1 个答案:

答案 0 :(得分:2)

有几种方法,正如@Alexis所指出的那样inexact->exact会做到这一点。但是,如果您使用floor,则racket/math提供了一个更简单的解决方案exact-floor(默认情况下包含在#lang racket程序中)。

这个函数与floor有相同的语义,但有一个例外,它产生一个确切的数字,而不是一个不精确的数字。

> (floor 1.2)
1.0
> (exact-floor 1.2)
1

当然,重要的是要注意,因为+inf.0+nan.0(以及相关的变体)只是浮点数并且没有精确的模拟,所以你无法投射那些:

> (floor +inf.0)
+inf.0
> (exact-floor +inf.0)
; exact-floor: contract violation
;   expected: rational?
;   given: +inf.0
; [,bt for context]

基本上,floor功能对real?个号码进行操作,而exact-floor则对rational?个号码进行操作。但是,如果你选择不精确的>确切路线,你仍会得到同样的限制。