2012-04-08 74 views
2

如何在Scheme中将42.0转换为42.00
例如(在方案中):
当我做(/ 20.00 2)时,我得到10.0。我想10.00作为上述代替10.0方案:十进制数的精度

+0

我没有得到10.0;我得到1e1。我的观点是关于外部表示 – GoZoner 2012-04-15 03:23:09

回答

5

通过10.010.00是相同的表示的对象的结果。在R5RS Scheme中没有固定精度的十进制数。你需要什么固定的精度?如果它与输出相关,则需要进行某种格式的打印。检查您的计划实施的文档有关printfformat函数。另一方面,如果实际上需要十进制算术,则需要使用精确比率并根据要使用的规则明确舍入,或者使用整数并将它们视为1/100大小的单位。

4

数字10.010.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参数表示结果字符串中所需的字符总量,包括点。该解决方案具有独立于外部库的优点。

6

奥斯卡的解决方案运行良好,但更简单的解决方案是使用SRFI-48,它提供了额外的格式指令。

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