0

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

但是,我JAVA很容易管理它,但我是C/C++初学者。代码的 SSCCE JAVA

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

4 回答 4

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而不是 ascii hack -'0',但是您得到了图片。

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

char *x=&(buf[rc-1]);
while( *x=='0' ) x--;
return *x-'0';
于 2013-08-06T11:24:21.580 回答
2

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

于 2013-08-06T16:01:31.240 回答
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;
}
于 2013-08-06T11:32:25.677 回答
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);
}
于 2015-09-07T18:31:47.183 回答