如何修改Racket中csv-writing包输出的数值精度?
解决csv-writing中display-table的数值精度问题
你写的代码问题在于#:number-cell->string需要的是一个接收数值、返回对应字符串的函数,而你直接调用~r #:precision 8时没有传入要格式化的单元格数值,自然无法生效。
正确的做法是用lambda把单元格数值作为参数传给~r,这样每次处理数值单元格时,都会用指定精度格式化:
(display-table each_rank_table vars_out_port #:printing-params (make-csv-printing-params #:number-cell->string (lambda (num) (~r num #:precision 8))))
这里的lambda (num)定义了一个单参数函数,每次display-table处理数值单元格时,会把单元格的数值传给num,再通过~r num #:precision 8格式化为保留8位精度的字符串。
内容的提问来源于stack exchange,提问作者shakeshuck
相关产品推荐
相关产品推荐

