2013-08-06 57 views
0

我在找一個簡單的方法來打印數字的最後一個浮點數字。 For EG : 33.44 ans - 4如何打印數字浮動部分的最後一位數字?

然而,我在JAVA管理很容易,但我是一個C/C++ beginner.An 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

這並沒有真正意義,無論是在Java或C/C++。一般來說,'float'的最右邊的十進制數字並不是你所期望的;請參閱http://floating-point-gui.de/。這聽起來像你需要的是你的輸入字符串的最後一個字符。 –

+0

@OliCharlesworth謝謝你,編輯。 –

+2

@OliCharlesworth:如果只有你*能夠打印出真正的最後一位數字......我一直有意讀一段時間的「pi」的最後一位數字。 – nneonneo

回答

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碼破解-'0',但你得到的照片。

,如果你想在最右邊的非0值,返回行應該以

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

是的,大部分與Java代碼相同:) –

+0

另外,我看過'sprintf',所以它與snprintf'有什麼不同? –

+2

printf(和相關)代碼的'n'版本將最多寫入N(其中N是第二個參數)字符。你應該幾乎總是使用它們(以避免緩衝區溢出),除非你知道更好 –

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; 
} 
+0

對不起,但處理應該在類型'float/Float' :) –

+1

好的。我以爲你只是想打印控制檯上的最後一位數字。 – Srini

2

如果一個標稱值浮點數不是一個整數,除非小數部分是,等於0.5,0.25或0.75,小數部分的確切值將總是以125,375,625或875結尾。在許多情況下,其中一個實際上對t的確切名義值沒有興趣他是小數部分,而是一個四捨五入的十進制表示。在這種情況下,「最後」數字的值將取決於有多少人願意將報告值與數字的確切名義值不同(例如,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是「最後」數字。

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); 
} 
相關問題