1

我怎样才能转换42.042.00Scheme?
例如(在方案中):
当我这样做时(/ 20.00 2),我得到10.0. 我想要10.00作为上面的结果而不是10.0

4

4 回答 4

7

Óscar 的解决方案效果很好,但更简单的解决方案是使用SRFI-48,它提供了额外的格式指令。

(display (format "~0,2F" (/ 20.00 2)))

于 2012-04-08T19:01:26.207 回答
5

10.0和所代表的对象10.00是相同的。R5RS 方案中没有固定精度的十进制数。您需要固定精度做什么?如果它与输出相关,则需要进行某种格式化打印。检查您的 Scheme 实现文档中有关 a printforformat函数的信息。另一方面,如果您确实需要十进制算术,则需要使用精确的比率并根据要使用的规则显式舍入,或者使用整数并将它们视为大小为 1/100 的单位。

于 2012-04-08T18:03:19.143 回答
4

The numbers 10.0 and 10.00 are exactly the same. Maybe you want to format your output to a string with a fixed number of decimals to the right of the dot? try this:

(define (right-pad number len)
  (let* ((nstr (number->string number))
         (diff (- len (string-length nstr)))
         (pads (if (> diff 0) (make-string diff #\0) "")))
    (string-append nstr pads)))

Use it like this:

(display (right-pad (/ 20.00 2) 5))
> 10.00

Notice that the len parameter indicates the total amount of chars desired in the resulting string, including the dot. This solution has the advantage of being independent from external libraries.

于 2012-04-08T18:31:04.983 回答
0

如果你使用球拍,我认为这会有所帮助。

https://docs.racket-lang.org/reference/strings.html#%28def._%28%28lib。球拍%2Fformat..rkt%29。~7er%29%29

(~r pi #:精度 4)

“3.1416”

于 2017-04-07T07:03:44.460 回答