1
78
正常情况下不能这样做
但是“.6”是 全部的 数字宽度So
打破它。
你什么
可以
做的是
假设您的数字在变量num中,下面的函数将删除除第一个以外的所有内容
如果您对截断方面不满意(这将使
整个要点
一旦有了正确的四舍五入值,就可以再次将其传递给
进入:
(或呼叫
|
2
48
要消除尾随零,应使用“%g”格式:
在问题澄清一点后,抑制零不是唯一的问题,但也需要将输出限制到小数点后三位。我认为单靠sprintf格式字符串是不能做到的。AS Pax Diablo 指出,需要进行字符串操作。 |
3
16
我喜欢R的回答。稍微调整一下:
“1000”决定精度。 功率为0.5舍入。 编辑 好吧,这个答案被编辑了几次,我忘记了几年前我的想法(最初它并没有满足所有的标准)。所以这里有一个新版本(它可以填充所有条件并正确处理负数):
测试案例:
测试输出:
现在,满足所有标准:
不幸的是,这个答案是两行的
|
4
2
我在字符串(最右边开始)中搜索范围中的第一个字符
|
5
2
这样的情况怎么样(可能有舍入错误和需要调试的负值问题,留给读者作为练习):
它有点编程性,但至少它不会让您进行任何字符串操作。 |
6
1
一个简单的解决方案,但它可以完成任务,分配已知的长度和精度,并避免指数格式(当使用%g时这是一个风险):
添加或删除“elses”,如果您希望最多2位小数、4位小数等。 例如,如果您需要2个小数:
如果要指定保持字段对齐的最小宽度,请根据需要递增,例如:
还可以将其转换为一个函数,在该函数中传递所需的字段宽度:
|
7
1
我在张贴的一些解决方案中发现了问题。我根据上面的答案把这个放在一起。这似乎对我有用。
|
8
1
一些高投票率的解决方案建议
我认为最简单的解决办法是使用
请注意,用于数字和小数分隔符的字符取决于当前的区域设置。上面的代码采用C或US英语语言环境。 |
10
0
为什么不直接这么做?
|
11
0
上面略有变化:
代码在这里:
它仍然有可能溢出,所以要小心;p |
12
-1
由于F前面的“.3”,您的代码四舍五入到小数点后三位。
因此,如果第二行四舍五入到小数点后两位,则应将其更改为:
该代码将输出您想要的结果:
*注意:这是假设您已经在单独的行上打印了它,如果没有,则以下内容将阻止它在同一行上打印:
以下程序源代码是我对此答案的测试
|
Community wiki · 打印1到1000,不带循环或条件 1 年前 |
OverHeaven · 在2D数组中打印每行两次-C 2 年前 |
user16218933 · php上没有显示图像 2 年前 |
Sinayra · 循环中的strcat()与sprintf() 6 年前 |
obvionaoe · printf()在错误的位置打印换行符 6 年前 |
ByteMe95 · 错误的printf类型仍在打印正确的值 6 年前 |
141_MATRIX_141 · 指针C的值 6 年前 |