如何在Scheme中将42.0
转换为42.00
?
例如(在方案中):
当我(/ 20.00 2)
时,我得到10.0
。我希望10.00
作为上述结果,而不是10.0
答案 0 :(得分:6)
Óscar的解决方案运行良好,但更简单的解决方案是使用SRFI-48,它提供了额外的格式指令。
(display (format "~0,2F" (/ 20.00 2)))
答案 1 :(得分:5)
10.0
和10.00
代表的对象是相同的。在R5RS Scheme中没有固定精度的十进制数。你需要什么固定精度?如果它与输出相关,则需要进行某种格式化打印。查看有关printf
或format
函数的Scheme实现文档。另一方面,如果您实际上需要十进制算术,则需要使用精确比率并根据您要使用的规则明确舍入,或者使用整数并将它们视为大小为1/100的单位。
答案 2 :(得分:4)
数字10.0
和10.00
完全相同。也许你想将输出格式化为点右边有一个固定小数位数的字符串?试试这个:
(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)))
像这样使用:
(display (right-pad (/ 20.00 2) 5))
> 10.00
请注意,len
参数表示结果字符串中所需的字符总数,包括点。该解决方案具有独立于外部库的优势。
答案 3 :(得分:0)
如果你使用球拍,我认为这可能有所帮助。
(~r pi#:precision 4)
“3.1416”