Прырашчэнне апошняй лічбы падвойнага значэння

У мяне ёсць двайны зменнай, якая, як 80,14666666666668 тады я выкарыстаў функцыю падлогі, каб пакараціць яго да 8 лічбаў, як 80.14666666. Цяпер я хачу, каб павялічыць гэта значэнне і атрымаць адказ, як 80.14666667

4
Што рабіць, калі апошняя лічба 9?
дададзена аўтар Bohemian, крыніца
Што рабіць, калі апошняя лічба 9?
дададзена аўтар Bohemian, крыніца
Чаму б вам не задаць пытанне? :)
дададзена аўтар user, крыніца
Чаму б вам не задаць пытанне? :)
дададзена аўтар user, крыніца
Я хацеў бы прапанаваць «дадаць 0,00000001» да яго, але я баюся downvotes ...
дададзена аўтар Djon, крыніца
Я хацеў бы прапанаваць «дадаць 0,00000001» да яго, але я баюся downvotes ...
дададзена аўтар Djon, крыніца
"Цяпер я хачу, каб павялічыць гэта значэнне і атрымаць адказ, як 80.14666667.» <�Я> У вас ёсць наш дазвол, каб працягнуць.
дададзена аўтар Ernest Friedman-Hill, крыніца
"Цяпер я хачу, каб павялічыць гэта значэнне і атрымаць адказ, як 80.14666667.» <�Я> У вас ёсць наш дазвол, каб працягнуць.
дададзена аўтар Ernest Friedman-Hill, крыніца
Чаму ты проста не акругляць?
дададзена аўтар Vincent van der Weele, крыніца
Чаму ты проста не акругляць?
дададзена аўтар Vincent van der Weele, крыніца

7 адказы

Вы не можаце быць у курсе сапраўднай прыроды двайны с. Яны не маюць «лічбы»; яны ўяўляюць сабой кампактнае двайковае кадаваньне рацыянальных лікаў. Такім чынам, вы знойдзеце яго вельмі цяжка праграмна вызначыць, што з'яўляецца «апошняя лічба» з двайны .

Калі канкрэтная патрэба проста акругляць, то выкарыстоўвайце круглы функцыі замест ўсячэнне ; у адваротным выпадку разгледзець магчымасць выкарыстання BigDecimal , які сапраўды ўяўляе сабой лік з дзесятковых лічбаў.

2
дададзена

Вы не можаце быць у курсе сапраўднай прыроды двайны с. Яны не маюць «лічбы»; яны ўяўляюць сабой кампактнае двайковае кадаваньне рацыянальных лікаў. Такім чынам, вы знойдзеце яго вельмі цяжка праграмна вызначыць, што з'яўляецца «апошняя лічба» з двайны .

Калі канкрэтная патрэба проста акругляць, то выкарыстоўвайце круглы функцыі замест ўсячэнне ; у адваротным выпадку разгледзець магчымасць выкарыстання BigDecimal , які сапраўды ўяўляе сабой лік з дзесятковых лічбаў.

2
дададзена

Хуткі падыход быў бы:

double myNumber = 80.14666666;
myNumber += (1/10^8);//= 80.14666667

Гэта тое, што вы шукаеце?

0
дададзена

Проста дадайце 0,00000001 на нумар.

Аднак значэння з якая плавае кропкай не вельмі добра падыходзяць для падліку падобных. Кожны раз, калі вы павялічваеце яго, вы будзеце дадаваць неадпаведнасць, так як нумары, як, якія прадстаўлены толькі прыкладна ў ліку з якая плавае кропкай.

Калі вы хочаце, каб павялічыць лік, выкарыстоўвайце замест цэлы лік. Памножце гэтую лічбу на 100000000 і пераўтварыць яго ў цэлы лік, так што вы атрымаеце 8014666666. Цяпер вы можаце павялічваць лік на адзінку без увядзення якіх-небудзь памылак. Захоўваць цэлы лік для прырашчэння, і пераўтварыць яго ў фармат з якая плавае кропкай, у выпадку неабходнасці шляху падзелу на 100000000. значэння з якая плавае коскі, вядома, усё яшчэ ёсць, гэта абмежаванне дакладнасці, але кожныя з іх будуць з'яўляцца вынікам пераўтварэння з свайго цэлалікавага аналага, і цэлае значэнне не мае якія-небудзь дакладныя пытанняў, так што вы не будзеце назапашваць памылку пазіцыянавання кожны раз, калі вы крок.

0
дададзена

Проста дадайце 0,00000001 на нумар.

Аднак значэння з якая плавае кропкай не вельмі добра падыходзяць для падліку падобных. Кожны раз, калі вы павялічваеце яго, вы будзеце дадаваць неадпаведнасць, так як нумары, як, якія прадстаўлены толькі прыкладна ў ліку з якая плавае кропкай.

Калі вы хочаце, каб павялічыць лік, выкарыстоўвайце замест цэлы лік. Памножце гэтую лічбу на 100000000 і пераўтварыць яго ў цэлы лік, так што вы атрымаеце 8014666666. Цяпер вы можаце павялічваць лік на адзінку без увядзення якіх-небудзь памылак. Захоўваць цэлы лік для прырашчэння, і пераўтварыць яго ў фармат з якая плавае кропкай, у выпадку неабходнасці шляху падзелу на 100000000. значэння з якая плавае коскі, вядома, усё яшчэ ёсць, гэта абмежаванне дакладнасці, але кожныя з іх будуць з'яўляцца вынікам пераўтварэння з свайго цэлалікавага аналага, і цэлае значэнне не мае якія-небудзь дакладныя пытанняў, так што вы не будзеце назапашваць памылку пазіцыянавання кожны раз, калі вы крок.

0
дададзена

Двайны фактычна не ўтрымлівае дакладнае значэнне, якое вы сабе ўявіць, што робіць. Гэта таму, што ляжыць у аснове поля праводзіцца ў выглядзе двайковага ліку і не можа ўтрымліваць дзесятыя за кошт фактару 1/5.

Замест таго, каб вы маглі выкарыстоўваць новы BigDecimal ( «80.14666666») і прырашчэнне, што новы BigDecimal ( «0,00000001»).

Звярніце ўвагу, што я перадаю радок для ініцыялізацыі гэтага аб'екта. Калі вы перадаеце ў два разы BigDecimal будзе ініцыялізаваны у адпаведнасці са значэннем двайніка, які, як згадана не ўтрымлівае дакладнае значэнне, якое вы сабе ўявіць, што робіць.

0
дададзена

Двайны фактычна не ўтрымлівае дакладнае значэнне, якое вы сабе ўявіць, што робіць. Гэта таму, што ляжыць у аснове поля праводзіцца ў выглядзе двайковага ліку і не можа ўтрымліваць дзесятыя за кошт фактару 1/5.

Замест таго, каб вы маглі выкарыстоўваць новы BigDecimal ( «80.14666666») і прырашчэнне, што новы BigDecimal ( «0,00000001»).

Звярніце ўвагу, што я перадаю радок для ініцыялізацыі гэтага аб'екта. Калі вы перадаеце ў два разы BigDecimal будзе ініцыялізаваны у адпаведнасці са значэннем двайніка, які, як згадана не ўтрымлівае дакладнае значэнне, якое вы сабе ўявіць, што робіць.

0
дададзена