簡體   English   中英

如何將uint32_t轉換為double或float和print?

[英]How to convert uint32_t to double or float and print?

我正在使用模數轉換器讀取0至3.3V的電壓值。 ADC提供從0x000x0FFF (0到4095)的輸出。 我想用兩位小數來打印電壓讀數。 我已經閱讀了許多答案,但沒有嘗試過。 這是我的代碼:

uint32_t pui32ADC0Value[1]; // ADC0 data value
double D0v;                 // Decimal value

// Read value from ADC
ADCSequenceDataGet(ADC0_BASE, 3, pui32ADC0Value);

// Convert to decimal
D0v = (double)pui32ADC0Value[0] / 4095 * 3.3;

// Print to console
UART0printf("\n\r> D0 = %.2d V", D0v);

我得到的輸出是: D0 = ERROR2d V

pui32ADC0Value可以pui32ADC0Value打印並給出期望的值,所以我知道它正在工作。

這個錯誤是什么意思?

注意: UART0printf是我正在使用的TIVA TM4C微控制器上的預定義UART功能。

更新:我錯誤地認為UART0printfprintf相同,因為我之前在%u%s%x使用過它。 但是,對於數字,它僅支持%c%i%u 我正在重新編寫我的代碼,如果我什么都沒收到,它將進行更新。

更新2:我可以這樣做嗎? 我知道它將四舍五入...

uint32_t pui32ADC0Value[1]; // ADC0 data value
uint32_t D0v[2];                 // Decimal value

// Read value from ADC
ADCSequenceDataGet(ADC0_BASE, 3, pui32ADC0Value);

// Convert to decimal
for ( int i = 0; i <= 2; i++){
    D0v[i] = (pui32ADC0Value[0]/10^i) / 4096 * 3.3;
}

// Display the AIN0 (PE0) digital value on the console.
UART0printf("\n\r> D0 = %d.%d%d V", D0v[0],D0v[1],D0v[2]);

如果此功能可以像printf一樣工作:

UART0printf("\n\r> D0 = %.2f V\n", D0v);

如果您使用以下代碼,您的代碼也可能會更快地工作:

D0v = (double)pui32ADC0Value[0] * (3.3 / 4095);

編譯器將預先計算3.3 / 4095並將執行單個浮點乘法運算。 否則,有可能首先完成除法(通常比乘除需要更多的CPU周期),然后再乘以* 3.3

另外,由於您似乎只需要2位精度,因此可以使用float (單精度)而不是double 它的執行速度可能更快(但可能會更慢),這取決於平台。

問題中的UPDATE2更新:

嘗試這個:

uint32_t pui32ADC0Value[1]; // ADC0 data value
uint32_t D0v;               // Decimal value

// Read value from ADC
ADCSequenceDataGet(ADC0_BASE, 3, pui32ADC0Value);

// Convert to millivolts
D0v = pui32ADC0Value[0] * (3300.0 / 4095);

// Display the AIN0 (PE0) digital value on the console.
UART0printf("\n\r> D0 = %d mV", D0v); // If it's OK for you to display in mV
UART0printf("\n\r> D0 = %d.%03d V", D0v / 1000, D0v % 1000); // Print in V

沒有這樣的printf格式字符串

%.2d

格式化程序%d表示integer ,因此沒有十進制精度選項。 %. 被解析為錯誤(因為它不存在),並且2d將其逐字記錄到您的輸出中。

浮點值的格式為%f ,因此:

%.2f

但是,所有這些都是基於這樣的假設: UART0printf您在問題中沒有發現的UART0printfprintf相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM