我怎样才能转换42.0
成42.00
Scheme?
例如(在方案中):
当我这样做时(/ 20.00 2)
,我得到10.0
. 我想要10.00
作为上面的结果而不是10.0
4 回答
Óscar 的解决方案效果很好,但更简单的解决方案是使用SRFI-48,它提供了额外的格式指令。
(display (format "~0,2F" (/ 20.00 2)))
10.0
和所代表的对象10.00
是相同的。R5RS 方案中没有固定精度的十进制数。您需要固定精度做什么?如果它与输出相关,则需要进行某种格式化打印。检查您的 Scheme 实现文档中有关 a printf
orformat
函数的信息。另一方面,如果您确实需要十进制算术,则需要使用精确的比率并根据要使用的规则显式舍入,或者使用整数并将它们视为大小为 1/100 的单位。
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.
如果你使用球拍,我认为这会有所帮助。
https://docs.racket-lang.org/reference/strings.html#%28def._%28%28lib。球拍%2Fformat..rkt%29。~7er%29%29
(~r pi #:精度 4)
“3.1416”