100.1 // removing the last "0", and adding a decimal place" />
登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-18 08:18:33 176浏览 收藏

从现在开始,我们要努力学习啦!今天我给大家带来《使用小数位的整数的条件格式》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!

问题内容

我遇到以下情况:我将接收整数,并且必须根据以下规则对其进行格式化:

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

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


正确答案


使用浮点数

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

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

为了避免“大”数字恢复为 %e 科学记数法(超过默认精度(%g 为 6)的数字),请显式指定宽度,如下所示:

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 上试试这个。

终于介绍完啦!小伙伴们,这篇关于《使用小数位的整数的条件格式》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>