使用小数位的整数条件格式
Conditional formatting of integers using decimal places
我遇到以下情况:我将收到整数并且必须根据以下规则对其进行格式化:
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
动词,它删除尾随零:
For floating-point values, width sets the minimum width of the field and precision sets the number of places after the decimal, if appropriate, except that for %g/%G precision sets the maximum number of significant digits (trailing zeros are removed).
为了避免“大”数字恢复为 %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 上试试这个。
我遇到以下情况:我将收到整数并且必须根据以下规则对其进行格式化:
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
动词,它删除尾随零:
For floating-point values, width sets the minimum width of the field and precision sets the number of places after the decimal, if appropriate, except that for %g/%G precision sets the maximum number of significant digits (trailing zeros are removed).
为了避免“大”数字恢复为 %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 上试试这个。