为了账号安全,请及时绑定邮箱和手机立即绑定

使用小数位的整数条件格式

使用小数位的整数条件格式

Go
慕村225694 2022-11-23 14:22:31

我有以下情况:我将收到整数并且必须根据以下规则格式化它们:


10000 -> 100 // removing the last "00"

10010 -> 100.1 // removing the last "0", and adding a decimal place

10011 -> 100.11 // adding two decimal places 

如何做到这一点?非常感谢。


查看完整描述

1 回答

?
慕慕森

TA贡献1581条经验 获得超17个赞

使用浮点数

将整数转换为float64,除以100并使用包的%g动词fmt,它删除尾随零:


对于浮点值,宽度设置字段的最小宽度,精度设置小数点后的位数(如果适用),除了 %g/%G 精度设置最大有效数字位数(尾随零被删除) .


为避免“大”数字恢复为%e科学记数法(大于默认精度的数字,即 6 %g),明确指定宽度,如下所示:


fmt.Printf("%.12g\n", float64(v)/100)

测试它:


for _, v := range []int{

    10000, 10010, 10011,

    10000000, 10000010, 10000011,

    10000000000, 10000000010, 10000000011,

} {

    fmt.Printf("%.12g\n", float64(v)/100)

}

这将输出(在Go Playground上尝试):


100

100.1

100.11

100000

100000.1

100000.11

100000000

100000000.1

100000000.11

使用整数

在不转换为浮点数的情况下(并依赖于 的尾随零删除%g),这就是使用整数运算的方法:


最后 2 位是除以 100 的余数,其余是整数除以 100 的结果。您可以根据余数格式化这 2 个数字,如下所示:


switch q, r := v/100, v%100; {

case r == 0:

    fmt.Println(q)

case r%10 == 0:

    fmt.Printf("%d.%d\n", q, r/10)

default:

    fmt.Printf("%d.%02d\n", q, r)

}

在Go Playground试试这个。


查看完整回答
反对 回复 2022-11-23

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信