ParseInt (1/0, 19) 18 ආපසු එන්නේ ඇයි?


854

මට ජාවාස්ක්‍රිප්ට් හි කරදරකාරී ගැටලුවක් තිබේ .

> parseInt(1 / 0, 19)
> 18

ඇයි ඇයි parseIntකාර්යය නැවත 18?


3
සිත්ගන්නා සුළුය. නමුත් මෙය ඔබට කරදරකාරී ගැටලුවක් වන්නේ ඇයි? ඔබට අනන්තය වෙනත් ආකාරවලින් හැසිරවිය යුතුද? එසේ නම්, ifඋදව්වක් විය හැකිය.
තිලෝ

256
ඔබ මොන මගුලක්ද කළේ, ඔබට පදනම් -19 අංක හෝ ශුන්‍යයෙන් බෙදීම අවශ්‍ය විය.
ජැක් එම්

20
ඔබ JS ගැන ව්‍යාකූල වූ විට, මෙම උපුටා දැක්වීම වෙත ආපසු ගොස් මුළු නින්දිත භාෂාවම නිර්මාණය කර ක්‍රියාත්මක කර ඇති බව මතක තබා ගන්න දින 10 කටත් අඩු කාලයකදී (එය කළ පුද්ගලයාට අනුව).
ටයිලර්

32
නිති අසන ප්‍රශ්න වලින්: "ඔබ ඇසිය යුත්තේ ඔබ මුහුණ දෙන සැබෑ ගැටළු පදනම් කරගෙන ප්‍රායෝගික, පිළිතුරු දිය හැකි ප්‍රශ්න පමණි." මෙය සැබවින්ම ඔබ මුහුණ දෙන "කරදරකාරී ගැටළුවක්" නොවේ, එය සදාකාලිකවම අන්තර්ජාලය පුරා පාවෙමින් පවතින යථාර්ථවාදී නොවන උදාහරණයකි .
බ්ලැක් ලයිව්ස් මැටර්

2
python එකම දේ කරයි: int ('I', 19) == 18
oberhamsi

Answers:


1293

එහි ප්‍රති result ලය 1/0වන්නේ Infinity.

parseIntඑහි පළමු තර්කය නූලක් ලෙස සලකන අතර එයින් අදහස් කරන්නේ පළමුවෙන්ම Infinity.toString()හැඳින්වෙන්නේ නූල් නිපදවීමයි "Infinity". එබැවින් එය "Infinity"19 වන පාදයේ දශමයට පරිවර්තනය කිරීමට ඔබ ඉල්ලා සිටි ආකාරයටම ක්‍රියා කරයි .

19 වන පාදයේ ඉලක්කම් සහ ඒවායේ දශම අගයන් මෙන්න:

Base 19   Base 10 (decimal)
---------------------------
   0            0
   1            1
   2            2
   3            3
   4            4
   5            5
   6            6
   7            7
   8            8
   9            9
   a            10
   b            11
   c            12
   d            13
   e            14
   f            15
   g            16
   h            17
   i            18

මීළඟට සිදුවන්නේ, එහි කොටස විග්‍රහ කළ හැකිදැයි සොයා ගැනීමට parseIntආදානය පරිලෝකනය කර "Infinity"පළමු කොටස පිළිගැනීමෙන් පසුව නතර වේ I( n19 වන පාදයේ වලංගු ඉලක්කම් නොවන නිසා ).

එබැවින් එය ඔබ ඇමතූ ආකාරයට හැසිරෙන අතර එය parseInt("I", 19)ඉහත වගුවෙන් දශම 18 බවට පරිවර්තනය වේ.


32
itmithunsatheesh උත්සාහ කරන්න parseInt('Infini',24).
සුපර්

112
ith මිතුන්සතේෂ්: 24 nවන පාදයේ වලංගු ඉලක්කම් බැවින් එය ඇත්ත වශයෙන්ම අවසන් වේ parseInt("Infini", 24).
ජෝන්

36
මේ ආකාරයට හැසිරෙන භාෂාවකින් යමෙකුට 'වැඩසටහන්' කිරීමට අවශ්‍ය ඇයි?
ෆ්‍රාන්ස් බූමා

45
Rans ෆ්‍රාන්ස්බූමා: ජේඑස් තමන්ගේම ආකාරයෙන් ලස්සනයි. ඇත්ත වශයෙන්ම, මෙහි සිදුවන දෙයින් කිසිදු කොටසක් ගතික භාෂාවකින් අසාධාරණ නොවේ.
ජෝන්

59
On ජෝන්: මෙම පුරාවස්තුව ගතික භාෂාවේ ප්‍රති result ලයක් නොවේ; එය ලිහිල්-ටයිප් කිරීමේ ප්‍රති result ලයකි. තදින් ටයිප් කළ ගතික භාෂාවෙන්, මේ ආකාරයේ මෝඩකම වැළැක්වීම සඳහා අනන්තය (පාවෙන) “අනන්තය” (නූල්) බවට පරිවර්තනය කිරීම සිදු නොවේ.
බොරු රයන්

226

සිදුවීම් අනුපිළිවෙල මෙන්න:

  • 1/0 වෙත ඇගයීමට ලක් කරයි Infinity
  • parseInt19 වන පාදයේ 18 වන කියවීම Infinityසහ සතුටින් සටහන් කිරීමI
  • parseInt එය පරිවර්තනය කළ නොහැකි බැවින් ඉතිරි කොටස නොසලකා හරියි.

ඔබට ඕනෑම පදනමක් >= 19සඳහා ප්‍රති result ලයක් ලැබෙනු ඇති බව සලකන්න , නමුත් ඊට පහළින් ඇති පදනම් සඳහා නොවේ. භෂ්ම සඳහා >= 24, nඑම අවස්ථාවේදී වලංගු ඉලක්කම් බවට පත්වන පරිදි ඔබට විශාල ප්‍රති result ලයක් ලැබෙනු ඇත .


H තිලෝ බීටීඩබ්ලිව්, හේතුව කුමක්ද, එය 19 ට නතර විය හැක්කේ ඇයි ? ඔබ දන්නවාද, ජේඑස් හට නැවත අර්ථ දැක්විය හැකි විශාලතම පදනම කුමක්ද?
ආන්තර්

4
OrdNordvind parseIntඉංග්‍රීසි හෝඩියේ අක්ෂර 26 ක් ඇති බැවින් විශාලතම පදනම 36 ක් වන අතර සම්මුතිය යනු ඉලක්කම් සහ අකුරු ලබා දී ඇති පදනමේ වලංගු ඉලක්කම් සමූහයක් ලෙස භාවිතා කිරීමයි.
ක්‍රේග් සිට්‍රෝ

4
බුලට් පොයින්ට් # 2 හි, මම වෙනස් Infinityකිරීමට යෝජනා කරමි "Infinity"...
සීජේබීඑස්

38

ඉහත පිළිතුරු වලට එකතු කිරීම සඳහා:

parseInt යන්නෙන් අදහස් කරන්නේ නූල් සංඛ්‍යා වලට විග්‍රහ කිරීමයි (හෝඩුවාව නමෙහි ඇත). ඔබගේ තත්වය තුළ, 1/0 දැනටමත් අංකයක් බැවින් ඔබට කිසිදු විග්‍රහයක් කිරීමට අවශ්‍ය නැත , එබැවින් එය ක්‍රියාකාරිත්වයේ අමුතු තේරීමක් වේ. ඔබට අංකයක් තිබේ නම් (ඔබ කරන) එය විශේෂිත පදනමක් බවට පරිවර්තනය කිරීමට අවශ්‍ය නම්, ඔබ ඒ වෙනුවට රේඩික්ස් සමඟ toString භාවිතා කළ යුතුය .

var num = 1 / 0;
var numInBase19 = num.toString(19); // returns the string "Infinity"

13

ඉහත පිළිතුරු වලට එකතු කිරීම

parseInt(1/0,19) සමාන වේ parseInt("Infinity",19)

පදනම් අංක 19 තුළ 0-9සහ A-I (or a-i)වලංගු සංඛ්‍යා වේ. එබැවින්, “අනන්තය” සිට එය I19 වන පදනම ගෙන 10 වන පදනම බවට පරිවර්තනය වන අතර එය 18 වන බවට පත්වේ. එවිට එය ඊළඟ අක්‍ෂරය එනම් n19 වන පාදයේ නොමැති අතර එය ඊළඟ අක්ෂර ඉවතලයි. )

එබැවින්, ඔබ ලියන්නේ නම් parseInt("Infinity",19)හෝ parseInt("I",19)ප්‍රති parseInt("i",19)result ලය සමාන වනු ඇත 18.

දැන්, ඔබ ලිවීමට නම් parseInt("I0",19)ලබන ප්රතිඵල 342 ලෙස I X 19 (the base)^1 + 0 X 19^0 = 18 X 19^1 + 0 X 19^0= 18 X 19 + 0 X 1 =342

ඒ හා සමානව, parseInt("I11",19)ප්රති result ලය වනු ඇත6518

එනම්

  18 X 19^2  +   1 X 19^1   +  1 X 19^0
= 18 X 19^2  +   1 X 19^1   +  1 X 19^0
= 18 X 361   +   1 X 19     +  1 X 1
= 6498  +  19  +  1
= 6518
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.