第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何添加兩個(gè)java.lang.Numbers?

如何添加兩個(gè)java.lang.Numbers?

胡子哥哥 2019-09-03 16:21:26
我有兩個(gè)號(hào)碼。例如:Number a = 2;Number b = 3;//Following is an error:Number c = a + b;為什么Numbers不支持算術(shù)運(yùn)算?無(wú)論如何,我如何在java中添加這兩個(gè)數(shù)字?(當(dāng)然我從某個(gè)地方得到它們,我不知道它們是Integer還是float等)。
查看完整描述

3 回答

?
呼如林

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊

你說(shuō)你不知道你的數(shù)字是整數(shù)還是浮點(diǎn)數(shù)......當(dāng)你使用這個(gè)Number類(lèi)時(shí),編譯器也不知道你的數(shù)字是整數(shù),浮點(diǎn)數(shù)還是其他東西。結(jié)果,像+和 - 這樣的基本數(shù)學(xué)運(yùn)算符不起作用; 計(jì)算機(jī)不知道如何處理這些值。


開(kāi)始編輯


根據(jù)討論,我認(rèn)為一個(gè)例子可能有所幫助。計(jì)算機(jī)將浮點(diǎn)數(shù)存儲(chǔ)為兩部分,即系數(shù)和指數(shù)。因此,在理論系統(tǒng)中,001110可能被分解為0011 10或3 2 = 9.但正整數(shù)將數(shù)字存儲(chǔ)為二進(jìn)制,因此001110也可能意味著2 + 4 + 8 = 14.當(dāng)您使用該類(lèi)時(shí)Number, '告訴計(jì)算機(jī)你不知道這個(gè)數(shù)字是浮點(diǎn)數(shù)還是int數(shù)或者是什么,所以它知道它有001110但它不知道這是否意味著9或14或其他值。


結(jié)束編輯


你可以做的是做一點(diǎn)假設(shè)并轉(zhuǎn)換成其中一種類(lèi)型進(jìn)行數(shù)學(xué)運(yùn)算。所以你可以擁有


Number c = a.intValue() + b.intValue();

你可能會(huì)變成


Integer c = a.intValue() + b.intValue();

如果你愿意遭受一些舍入錯(cuò)誤,或者


Float c = a.floatValue() + b.floatValue();

如果您懷疑自己沒(méi)有處理整數(shù),并且可能會(huì)出現(xiàn)輕微的精確問(wèn)題。或者,如果你寧愿采取一點(diǎn)性能打擊而不是那個(gè)錯(cuò)誤,


BigDecimal c = new BigDecimal(a.floatValue()).add(new BigDecimal(b.floatValue()));



查看完整回答
反對(duì) 回復(fù) 2019-09-03
?
一只甜甜圈

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊

它也可以用來(lái)為你處理添加的方法?,F(xiàn)在我不知道這將導(dǎo)致的性能影響,但我認(rèn)為它將比使用BigDecimal少。


public static Number addNumbers(Number a, Number b) {

    if(a instanceof Double || b instanceof Double) {

        return a.doubleValue() + b.doubleValue();

    } else if(a instanceof Float || b instanceof Float) {

        return a.floatValue() + b.floatValue();

    } else if(a instanceof Long || b instanceof Long) {

        return a.longValue() + b.longValue();

    } else {

        return a.intValue() + b.intValue();

    }

}


查看完整回答
反對(duì) 回復(fù) 2019-09-03
?
墨色風(fēng)雨

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊

正確添加任何兩種類(lèi)型的java.lang.Number的唯一方法是:


Number a = 2f; // Foat

Number b = 3d; // Double

Number c = new BigDecimal( a.toString() ).add( new BigDecimal( b.toString() ) );

這甚至適用于具有不同數(shù)字類(lèi)型的兩個(gè)參數(shù)。只要number-type的toString()不降低精度,它(應(yīng)該?)不會(huì)產(chǎn)生任何副作用,如溢出或失去精度。


查看完整回答
反對(duì) 回復(fù) 2019-09-03
  • 3 回答
  • 0 關(guān)注
  • 412 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)