2013-01-25 53 views
6

मेरे डेटाबेस में, मेरे पास कुछ "वास्तविक" फ़ील्ड हैं।डबल से फ्लोट में परिवर्तित नहीं हो सकता

यहाँ संरचना:

database.execSQL("create table " + TABLE_LOGS + " (" 
      + COLUMN_ID + " integer primary key autoincrement," 
      + COLUMN_ID_DAY_EXERCISE + " integer not null," 
      + COLUMN_REPS + " integer not null" 
      + COLUMN_WEIGHT + " real not null" 
      + COLUMN_1RM + " real not null" 
      + COLUMN_DATE + " integer not null" 
      + ")"); 

अब 1RM गणना ताकि मैं यह डेटाबेस में सम्मिलित कर सकते कि मैं क्या करने की कोशिश कर रहा हूँ।

public void createLog(long id_day_exercise, float reps, long weight) { 

    // create 1rm 
    // create date timestamp 

    float onerm = weight/(1.0278-(.0278*reps)); 
    long unixTime = System.currentTimeMillis()/1000L; 
} 

मैं यहाँ अटक कर रहा हूँ:

यहाँ मेरी समारोह अब तक है। यह मुझे onerm के लिए त्रुटि "डबल से फ्लोट में परिवर्तित नहीं कर सकता" दे रहा है। मैंने वजन के साथ (फ्लोट) का उपयोग कर एक फ्लोट के रूप में वजन कास्टिंग करने की कोशिश की है, मैंने weight.floatValue() का उपयोग करने की कोशिश की है और कुछ भी काम नहीं करता है।

उत्तर

23

क्या आपने यह कोशिश की है?

float onerm = (float) (weigth/(1.0278-(.0278*reps))); 
+1

यह बात मेरे लिए काम नहीं कर रही है .. –

2

मुद्दा यह है कि double प्रकार float की तुलना में अधिक सटीक है। जब आप वह असाइनमेंट करते हैं तो आप जानकारी खो देंगे। यही कारण है कि संकलक आपको ऐसा करने नहीं देता है। यह तब होता है जब आप char b = a करना चाहते हैं जहां int है।

एक स्पष्ट कलाकार का उपयोग करने से आप संकलन कर सकते हैं, लेकिन डेटा/सटीक हानि हो सकती है।

संपादित करें:

अपने मूल प्रश्न में के बाद से गणना करने के लिए सभी आदानों floats, उपयोग नाव शाब्दिक हैं। उदाहरण के लिए, 1.0278 एक डबल शाब्दिक है। अर्थात।

float onerm = weight/(1.0278f-(.0278f*reps)); 
+0

आप मुझे क्या सलाह देते हैं? – scarhand

+0

@scarhand फ्लोट अक्षर का उपयोग करने के बारे में संपादित करें देखें। – frozenkoi

7

इस दृष्टिकोण के बारे में क्या: इस तरह के स्थिरांक है कि सभी गणना तैरता हैं और युगल के लिए प्रोत्साहित नहीं कर रहे हैं करने के लिए f संलग्न करें?

Float.valueOf(String.valueOf(your_double_variable)); 
1

प्रश्न के शीर्षक के लिए एक अधिक सामान्य जवाब (लेकिन विशिष्ट सामग्री), एक डबल से एक नाव के लिए कास्टिंग इस तरह किया जा सकता है के रूप में:

double d = 1.2; 
float f = (float) d; 

या यदि आपने अभी 1.2 को शुरू करने के लिए फ्लोट के रूप में व्यक्त करने की आवश्यकता है, फिर 1.2f का उपयोग करें।

नोट

  • float एकल परिशुद्धता 32-बिट और double डबल परिशुद्धता 64 बिट तो यह रूपांतरण में परिशुद्धता कम करने के लिए संभव है। primitive data types documentation देखें।