運算精度丟失和數值丟失問題

2022-06-13 19:48:07 字數 853 閱讀 8079

標籤(空格分隔): 程式設計競賽 程式設計錯題

在做題時,我經常會碰到程式很對,但結果出錯的問題。如下面這個。

【題目描述】

經常出國旅行的驢友都知道,需要及時了解當地的氣溫狀況。但不少國家採用了不同的溫度計量單位:有些使用華氏溫度標準(f),有些使用攝氏溫度(c)。現在,請你根據溫度轉換公式設計乙個溫度轉換程式,可以進行溫度轉換。如果輸入攝氏溫度,顯示轉換的華氏溫度;如果輸入華氏溫度,顯示轉換的攝氏溫度。溫度轉換的公式為:f=(c×9/5)+32 ,式中f表示華氏溫度,c表示攝氏溫度。

【輸入】

僅一行,2個數。第乙個為整數(1或2)表示轉換的型別,1表示華氏溫度轉換為攝氏溫度,2表示攝氏溫度轉華氏溫度;第2個為浮點數表示需要轉換的溫度值。

【輸出】

轉換後的溫度值(保留小數點後 2 位)。輸出格式為「the centigrade is 37.78」或「the fahrenheit is 37.78」。

這道題很簡單,但是我剛開始寫的**是這樣的。

#include 

int main()

return

0;}

注意第七和第八行。程式很對,但每次執行1選擇時,結果都是0;每次執行選擇2時,結果都是乙個整型數。很無語,我始終找不出來是為什麼。

後來我才發現,問題出在整型數上了。以第七行為例,c語言二元運算子自左向右運算,是一步步得出結果的,而不是像人一樣一下子出結果。當它讀到「5/9」時,計算出來的數不是1.8,而是0,因為兩個整型數運算,結果還是整型數。這就是問題所在,第八行同理。

如何解決呢?用自動型別轉換,可以解決整型變浮點型位數丟失的問題,只需要在其中乙個整型數前乘以1.0即可。

cJSON精度丟失問題

問題復現步驟 1 輸入字串 2 字串轉成cjson物件 3 呼叫cjson print將cjson物件再轉成字串 4 再將字串轉成cjson物件 5 保留8位精度方式呼叫printf列印值,輸出變成 0.123456 問題的原因出在cjson的print number函式 static char p...

js tofixed精度丟失問題

tofixed 方法可把 number 四捨五入為指定小數字數的數字。例如將資料num保留2位小數,則表示為 tofixed num 但是其四捨五入的規則與數學中的規則不同,使用的是銀行家捨入規則,銀行家捨入 所謂銀行家捨入法,其實質是一種四捨六入五取偶 又稱四捨六入五留雙 法。具體規則如下 簡單來...

Long型別精度丟失問題

js long型別經度丟失 解決方案 後端將long型別引數轉為字串後返回給前端 在單個long型別的引數上加上 import com.fasterxml.jackson.databind.annotation.jsonserialize jsonserialize using tostringse...