如何打印数字浮动部分的最后一位?

时间:2013-08-06 11:15:25

标签: java c floating-point

我找到一种简单的方法来打印数字的最后一个浮点数。For EG : 33.44 ans - 4

但是,我在JAVA轻松管理了它,但我是C/C++初学者。JAVA代码的SSCCE:

import java.util.Scanner;

 public class Test{
 public static void main(String[] args){
 Scanner scan=new Scanner(System.in);
    Float f;
    f=scan.nextFloat();
    System.out.println(f);
    String g=f.toString(f);
    System.out.println(g.charAt(g.length()-1));
 }
}

我认为在C/C++中这不容易。任何逻辑/解决方案?

4 个答案:

答案 0 :(得分:3)

如果你想以同等的方式做,你会做类似的事情(没有编译检查)

int getLast( double value )
{
  int rc;
  char buf[64];
  rc=snprintf(buf,64,"%f",value);
  // TODO:: check rc is in the range 1-64 
  return buf[rc-1]-'0';
}

你应该查看rc的结果并使用strtol而不是-'0'的ascii hack,但是你得到了图片。

如果您想要最右边的非0值,则返回行应替换为

char *x=&(buf[rc-1]);
while( *x=='0' ) x--;
return *x-'0';

答案 1 :(得分:2)

如果浮点数的标称值不是整数,除非小数部分完全等于0.5,0.25或0.75,小数部分的确切值将始终结束在125,375,625或875中。在许多情况下,一个人实际上并不感兴趣的是小数部分的确切名义值,而是一个舍入的十进制表示。在这种情况下,“最后”数字的值将取决于人们愿意将报告的值与数字的确切名义值相差多少(例如,1.0f / 10.0ffloat,其名义价值正好是1,342,173 / 13,421,728,即0.100000001490116119384765625。确切标称值的最后一位数是625,但该数字也可能被解释为0.1或0.1000000015,0.10000000149,0.10000000149012等,因此可以证明1,5,9或2是“最后”数字。

答案 2 :(得分:0)

希望这对你有帮助(用C ++编写):

#include <iostream>
#include<string>
using namespace std;
int main()
{
 string float_data;
 cin>>float_data;
 int len = float_data.length();
 cout<<float_data.at(len-1)<<endl;
  return 0;
}

答案 3 :(得分:0)

可以遵循以下方法,但它的浮动值不应该很大。

void main()
{
int i, m;
float n;
printf("Enter the number n: ");
scanf("%f", &n);
m=(int)n;
i=(m % 10);
printf("last digit = %d", i);
}