printf %f 去除末尾0

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了printf %f 去除末尾0相关的知识,希望对你有一定的参考价值。

用printf输出浮点数时,能不能去除小数末尾的0
比如printf("%f",5.2);就输出5.200000,能不能把后边的0去了?
我的那个5.2只是举个例子,实际要用的是变量,不定几位小数

没要取近似值啊

可以
你把%f改成%.1f就可以了
%.1f是说你的小数后保留一位小数
你在前面加上一个数,比如写成%4.1f,就是表示你的输出的数长度是4,保留一位小数,小数点算一位,不够的话就右对齐,前面补上空格就行了,你可以到机子上试试就知道了!
参考技术A

%e 指数形式的浮点数

%g 把输出的值按照%e或者%f类型中输出长度较小的方式输出

printf的打印格式里我查了下,并没有末尾去除0的打印格式,%g在打印较大浮点数的时候是以指数形式显示的. ".1f"或者".2f"固定了小数点后位数,除非你的数据小数点后几位固定,不然这个方案也不行的.

所以想要打印优化后的浮点数只能处理字符串了.某些语言有字符串处理trimright,如果没有只有自己实现了.

//GO 代码样例
package main


import "fmt"
import "strings"

func main()
s := "1234.012000"
s = strings.TrimRight(s,"0")
s = strings.TrimRight(s,".")
fmt.Println(s)

参考技术B 可以用printf("%.1f",5.2),输出5.2

printf("%m.nf",a)表示输出浮点数的小数点前m位,小数点后n位
参考技术C 末尾的零是有意义的,表示精度,去除后精度就不一样了。 参考技术D 你把F 前给定义一个数字就行了,不过这个数字应大于1,不信试一下

BigDecimal去除末尾多余的0

Java有自带的 stripTrailingZeros() 方法用于去除末尾多余的0

 BigDecimal num = new BigDecimal("100.1000");
 BigDecimal numNoEndZero = num.stripTrailingZeros();  //numNoEndZero  :1E+2
 System.out.println(numNoEndZero.toString());

按上面的方法输出结果,会显示科学计数法,所以需要处理一下,解决方法:

 String numNoEndZeroStr = new BigDecimal("100.1000").stripTrailingZeros().toPlainString();   //numNoEndZeroStr  :100.1
 System.out.println(numNoEndZeroStr);

 

以上是关于printf %f 去除末尾0的主要内容,如果未能解决你的问题,请参考以下文章

c语言中的pow(x, y)的使用

小水王

访问嵌套结构时出现段错误

BigDecimal去除末尾多余的0

pythoninput()会不会自动去除末尾空格

拼凑字符串时,去除末尾多余字符的几个方法