[英]Converting int to double in C++
我無法從int
到double
進行簡單的轉換才能工作
#include <iostream>
int main()
{
int i = 8;
double d1 = i;
double d2 = static_cast<double>(i);
std::cout << "i = " << i << ", d1 = " << d1 << ", d2 = " << d2 << std::endl;
return 0;
}
d1
和d2
等於8
,而不是8.0
,不僅在stdout
,而且在 QtCreator 的調試器中。
AFAIK, d1
和d2
應該是8.0
,不是嗎?
誰能告訴我我做錯了什么?
我正在設置 g++ 編譯器,版本 7.4.0,符合 C++11。
謝謝!
我無法從 int 到 double 進行簡單的轉換才能工作
實際上,轉換本身工作得很好。
d1 和 d2 等於 8,而不是 8.0
8 和 8.0 是將相同值表示為字符串的兩種方式。 值沒有區別。
AFAIK,d1 和 d2 應該是 8.0,不是嗎?
它們是,因為 8 和 8.0 是相同的精確值。
誰能告訴我我做錯了什么?
您的錯誤是期望輸出為 8.0。 由於輸出流的默認格式設置,正確的輸出是 8。
另一個錯誤是假設從 int 到 double 的轉換有問題,而實際上問題出在文本輸出的格式上。
如果您的意圖是輸出 8.0,那么您的錯誤就是沒有使用正確的流操作器來實現該格式。 特別是,您需要使用std::fixed
操縱器來顯示固定的小數位數,即使它們為零。 您可以使用std::setprecision
設置要顯示的小數位數。 根據您希望在不同情況下格式化輸出的方式, std::showpoint
也可能是一個選項。
毫無疑問, d1
和d2
是double
s。 您也需要在標題<iomanip>
找到std::setprecision()
(顯然還有std::fixed
):
#include <iostream>
#include <iomanip>
int main()
{
int i = 8;
double d1 = i;
double d2 = static_cast<double>(i);
std::cout << "i = " << i << std::fixed << std::setprecision(2) << ", d1 = " << d1 << ", d2 = " << d2 << std::endl;
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.