frame的数值如果是浮点数,该怎么取舍只保留小数点后1位

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了frame的数值如果是浮点数,该怎么取舍只保留小数点后1位相关的知识,希望对你有一定的参考价值。

参考技术A 可以利用C语言的强制转换规则。
C语言规定,当浮点数强制转换为整型类型时,只保留整数部分。
所以对于浮点数,比如float类型a, 执行(int)a后的值就是整数部分。
这样当执行a-(int)a时,得到的就是小数部分的值了。
如果该功能经常使用,那么可以定义一个带参数的宏
#define DECIMAL(X) (x-(int)x)
这样执行DECIMAL(a)得到的值就是t的小数部分。

小数表达式的n项之和应该是浮点数时是整数

【中文标题】小数表达式的n项之和应该是浮点数时是整数【英文标题】:The sum of n terms of fractional expression is an integer when it should be a float 【发布时间】:2020-03-19 14:58:54 【问题描述】:

在下面的代码中为什么我没有得到一个有效的结果,除非我输入term = 1.0/n 而不是当term = 1/n。我已经将术语声明为浮动,这还不够吗?

#include <stdio.h>

int main()
    
     float sum = 0, term;
     int n, i;
     
     printf("enter the value of n:\n");
     scanf("%d", &n);
     term = 1.0 / n;
     for(i = 1; i <= n; i++)
       
        sum = term + sum; 
       
      
     printf("Sum = %.3f\n", sum);   
     
     return 0; 

【问题讨论】:

因为1intn 也是如此,所以你最终会得到整数除法。使用1.0 会导致浮点除法。 你想达到什么目的?总结1/nn 次只会给你1。你想要1 + 1/2 + 1/3 .. + 1/n吗? 我怀疑你想求和 1/i(或者更确切地说是 C 中的 1.0/i)。 表达式term = 1/n 的右轴是一个整数。在评估 RHS 时,LHS 的类型无关紧要。 【参考方案1】:

在下面的代码中为什么我没有得到一个有效的结果,除非我输入term = 1.0/n,而不是当term = 1/n。我已将term 声明为float。这还不够吗?

很遗憾没有。

ISO/IEC 9899:2017 §6.5.5 6 州:

整数相除时,/ 运算符的结果是去掉任何小数部分的代数商。105) 如果商a/b 是可表示的,则表达式(a/b)*b + a%b 应等于a [...]

105) 这通常被称为“向零截断”。

翻译:这两个整数相除的结果是一个整数。

即使将其分配给floatdouble 变量也不够,它会在分配之前被截断,解决方案是将小数表达式中的操作数之一转为浮点数或双精度数,例如你做到了。

【讨论】:

以上是关于frame的数值如果是浮点数,该怎么取舍只保留小数点后1位的主要内容,如果未能解决你的问题,请参考以下文章

如果是浮点数则显示小数点 2 位,如果是整数则显示小数点数 0 位 [重复]

vb保留小数点后2位怎么编写?

java的计算保留N位小数点问题

delphi 保留两位小数

什么是浮点数格式?

C语言编程序时怎么控制浮点型输出的小数点精确到几位