Tag: 数字格式

将正值舍入到C中的2位小数

通常,舍入到小数点后2位非常容易 printf(“%.2lf”,); 但是,舍入系统通常会舍入到最接近的偶数 。 例如, 2.554 -> 2.55 2.555 -> 2.56 2.565 -> 2.56 2.566 -> 2.57 而我想要实现的是 2.555 -> 2.56 2.565 -> 2.57 事实上, 四舍五入在C中是可行的,但仅对于整数; int a = (int)(b+0.5) 所以,我要问的是如何在正值上用2位小数而不是整数来做同样的事情来实现我之前说的打印 。

有没有办法检查字符串是否可以是C中的浮点数?

检查它是否可以是一个int很容易 – 只需检查每个数字是否在’0’和’9′ 。 但浮动更难。 我找到了这个 ,但没有一个答案真的有效。 请考虑此代码段,基于顶部(已接受)答案: float f; int ret = sscanf(“5.23.fkdj”, “%f”, &f); printf(“%d”, ret); 1将被打印。 另一个答案建议使用strpbrk ,检查是否存在某些非法字符,但这不起作用,因为5fin7不合法,但inf会。 另一个答案建议检查strtod的输出。 但考虑一下: char *number = “5.53 garbanzo beans” char *foo; strtod(number, &foo); printf(“%d”, isspace(*foo) || *foo == ‘\0’)); 它会打印1 。 但我不想完全删除isspace调用,因为” 5.53 “应该是一个有效的数字。 是否有一种优秀,优雅,惯用的方式来做我想做的事情?

将小数转换为hex数

为什么我们使用+ 55将十进制转换为hex数。 在这段代码中,我们使用+48将整数转换为字符。 当temp = 10时,我们使用+55。 +55是什么意思? #include int main(){ long int decimalNumber,remainder,quotient; int i=1,j,temp; char hexadecimalNumber[100]; printf(“Enter any decimal number: “); scanf(“%ld”,&decimalNumber); quotient = decimalNumber; while(quotient!=0){ temp = quotient % 16; //To convert integer into character if( temp 0;j–) printf(“%c”,hexadecimalNumber[j]); return 0; }