היחידות עצמן מוגדרות ב- חוברת SI, והקידומות הבינאריות שגורמות לטיעון המסוים הזה - קיבי, מבי, גיבי - פנימה חברת החשמל 80000-13.
פעם שלחתי באג שנגרם על ידי 24 בתים. בדיקת מכסת אחסון באפליקציית Laravel השוותה קובץ שהועלה 's גודל מול מגבלה שצוות המוצר כתב כ-"500 MB." המעלה דיווח על מגה-בייט כ-MiB. המגבלה נאכפה ב-MB עשרוני. הפער בין השניים הוא כ-4.6%, דבר שאינו נראה בבדיקה ונראה לעין כאשר לקוח ' ייצוא של 512,000,000 בתים נדחה כ-" גדול מדי" בעוד ממשק המשתמש מתעקש שהוא מתחת למגבלה.
המרת יחידה נראית כמו הבעיה המשעממת ביותר במחשוב ממש עד שהיא משחיתה משהו בשקט לכל המרה יש גורם מוגדר מדויק - אינץ' אחד הוא בדיוק 0.0254 מטר, פאונד אחד הוא בדיוק 0.45359237 קילוגרם - והסיבה שאנחנו טועים בהם היא שאנחנו נושאים קירובים מעוגלים במקום. אז בניתי את ממיר יחידה על [Toolz.dev] (/ סביב הערכים המוגדרים, המכסים את אחת עשרה הקטגוריות שאני מגיע אליהן בפועל, כולל אלו שרוב הממירים מתעלמים מהם: פיקסלים CSS, נקודות טיפוגרפיות ויחידות הנתונים הבינאריות מול העשרוניות שגרמו לבאג שלי.
TL;DR: כל יחידה בקטגוריה היא כפולה קבועה של יחידת בסיס אחת, כך שההמרה היא כפל-והחלקה בודדת - למעט טמפרטורה, שצריכה טרנספורמציה קשורה מכיוון שלצלזיוס, פרנהייט, קלווין ורנקין יש נקודות אפס שונות ממיר יחידה מכסה אורך, משקל, טמפרטורה, שטח, נפח, מהירות, זמן, נתונים, לחץ, אנרגיה וזווית עם גורמים סטנדרטיים מדויקים, מציג את הערך שלך בכל יחידה בבת אחת, ופועל כולו בדפדפן שלך.
איך בעצם עובדת המרת יחידות?
בחר יחידת בסיס אחת לכל קטגוריה. לבטא כל יחידה אחרת כיחס אליה. המרה ואז מצטמצמת לשורה אחת של חשבון:
result = value × (fromUnit.ratio / toUnit.ratio)
לאורך הבסיס הוא המטר סנטימטר יש יחס של 0.01, אינץ 'יש 0.0254 המרת 30 סמ לאינץ' הוא 30 × 0.01 / 0.0254 = 11.811. זה האלגוריתם כולו, ויש לו תכונה שימושית: מכיוון שכל מסלולי המרה דרך יחידת הבסיס, אתה אף פעם לא משרשר קירובים. המרת מיילים למיילים ימיים עוברת מייל → מטר → מייל ימי בביטוי אחד ולא דרך טבלת חיפוש של גורמים זוגיים, כל אחד עם עיגול משלו.
יחידות הבסיס ב ממיר יחידה האם ה-SI הם אלה שבהם הם קיימים: מטר, קילוגרם, שני, פסקל, ג'ול, רדיאן, מטר מרובע, מטר לשנייה נפח משתמש בליטר והנתונים משתמשים בבייט, שניהם לקריאה ולא לטוהר SI קפדני.
טמפרטורה היא היוצא מן הכלל ששובר את המודל, וכדאי להבין מדוע.
מדוע הטמפרטורה שונה מכל יחידה אחרת?
כי מאזני טמפרטורה הם אפינית, לא פרופורציונאלי. אפס סנטימטרים ואפס אינצ'ים הם באותו אורך - כלום אבל אפס צלזיוס ואפס פרנהייט אינם אותה טמפרטורה, ואף אחד מהם אינו " אין טמפרטורה בכלל." לקשקשים יש גם גודל צעד שונה וגם מקור שונה.
אז המרת טמפרטורה צריכה שתי פעולות, לא אחת: להזיז את המקור, ואז קנה מידה. הנוסחאות הסטנדרטיות:
- °F = (°C×9/5) + 32
- °C = (°F - 32) × 5/9
- K = °C + 273.15
- °R = K × 9/5
פנימית הממיר מנתב הכל דרך קלווין, שהוא היחיד מבין הארבעה עם אפס בעל משמעות פיזית - אפס מוחלט, הנקודה שבה התנועה התרמית נעצרת. זה גם נותן בדיקת תוקף חופשית: אם המרה מייצרת ערך קלווין שלילי, הקלט היה מתחת לאפס המוחלט ואינו טמפרטורה אמיתית הכלי דוחה אותו בהסבר ולא מחזיר שטויות בביטחון, וזה סוג הכנות הקטנה שמפרידה בין כלי שאתה יכול לסמוך עליו. אחד שאתה צריך לבדוק שוב.
התייחסות מהירה למספרים שאנשים באמת מסתכלים למעלה:
| צלסיוס | פרנהייט | קלווין | מה זה |
|---|---|---|---|
| –273.15 °C | −459.67 °F | 0 K | אפס מוחלט |
| -40 °C | –40 °F | 233.15 K | איפה שני הקשקשים חוצים |
| 0 °C | 32 °F | 273.15 K | מים קופאים |
| 20 °C | 68 °F | 293.15 K | טמפרטורת החדר |
| 37 °C | 98.6 °F | 310.15 K | גוף האדם |
| 100 °C | 212 °F | 373.15 K | מים רותחים בגובה פני הים |
הקרוסאובר –40 הוא זה ששווה לשנן זוהי הנקודה היחידה שבה צלסיוס ופרנהייט מסכימים, והוא עושה בדיקת שפיות טובה בכל שגרת המרה שאתה כותב.
מה ההבדל בין MB ל-MIB?
זו ההמרה שעולה כסף אמיתי ושעות ציד באגים אמיתיות, אז מגיע לה קטע משלה.
א מגה בייט (MB) הוא 1,000,000 בתים - יחידה עשרונית, 106. A mebibyte (MiB) הוא 1,048,576 בתים - יחידה בינארית, 2²0. הקידומות הבינאריות (קיבי, מבי, גיבי, טבי) תוקננו על ידי חברת החשמל ב-1998 בדיוק כדי לסיים את העמימות, וכמחצית מהתעשייה התעלמה מהן.
התוצאה היא בלגן שכולם הרגישו:
| פורסם | בתים בפועל | מה שמראה מערכת ההפעלה | לכאורה "loss" |
|---|---|---|---|
| 1 קילובייט | 1,000 | 0.98 KiB | 2.4% |
| 1 מגה-בייט | 1,000,000 | 0.95 MiB | 4.6% |
| 1 GB | 1,000,000,000 | 0.93 GiB | 7.4% |
| 1 שחפת | 1,000,000,000,000 | 0.91 TiB | 9.9% |
יצרני כוננים מוכרים ביחידות עשרוניות, כי עשרוני הופך את המספר לגדול יותר Windows מדווח ביחידות בינאריות אבל תוויות אותם "GB," אשר הוא המקום שבו " הכונן שלי 1 TB יש רק 931 GB" תלונה מגיעה מ - שום דבר לא חסר, התווית היא פשוט לא בסדר. macOS ורוב כלי לינוקס עכשיו לדווח עשרוני GB בכנות.RAM הוא תמיד בינארי, כי כתובת זיכרון הוא מטבעו חזקה של שני מהירויות רשת הן עשרוניות ו נמדד בסיביות, שהוא ציר שלישי של בלבול: "100 Mbps" החיבור מספק בערך 12.5 MB לשנייה, לא 100.
הכללים המעשיים שאני פועל לפיהם:
- בקוד, לעבוד ב בתים. המר רק בשכבת התצוגה.
- כאשר אתה כותב מגבלה במפרט, כתוב את ספירת הבתים בסוגריים: "500 MB (500,000,000 בתים)."
- אם חוזה ה-API שלך אומר MB, בחר עשרוני, כי זו המשמעות של התווית מחוץ ל-Windows.
- לעולם אל תניח שהמערכת האחרת מסכימה עם שלך. חשבון.
ה ממיר יחידה מפרט את שתי המשפחות זו לצד זו בקטגוריית הנתונים, כך שתוכל לראות את הפער במקום לנחש אותו אם אתה עובד עם ערכי בתים גולמיים ורוצה לראות אותם ברמת הסיביות, ה מתרגם בינארי הוא הכלי הנלווה.
אילו המרות אנשים באמת צריכים?
אחרי שצפיתי במה שמחפשים ובמה שאני מגיע לעצמי, הרשימה קצרה וצפויה. הנה אלה שכדאי לדעת קרים, עם הגורמים המדויקים ולא הקירובים:
| המרה | גורם מדויק | מתמטיקה מנטלית מהירה |
|---|---|---|
| cm → in | ÷ 2.54 | חצי אותו, ואז תחסיר 20% |
| ב → סמ | × 2.54 | תכפיל את זה, תוסיף 25% |
| קמ → mi | × 0.621371 | תכפילו ב-0.6, תוסיפו קצת |
| mi → קמ | × 1.609344 | הוסף 60% |
| kg → lb | × 2.20462262 | תכפיל את זה, תוסיף 10% |
| lb → קג | × 0.45359237 | חצי את זה, תחסיר 10% |
| °C → °F | × 1.8 + 32 | תכפיל את זה, תוסיף 30 (מחוספס) |
| קמ/שעה → קמש | × 0.621371 | אותו גורם כמו קמ → mi |
| L → US gal | ÷ 3.785411784 | מחלקים ב-4, מוסיפים קצת |
| MB → MiB | ÷ 1.048576 | הורידו כ-4.6% |
טור הנפש-מתמטיקה מחוספס בכוונה - מספיק טוב כדי שפיות-לבדוק תוצאה, לא מספיק טוב כדי לשלוח ההבחנה משנה: " להכפיל את זה ולהוסיף 10%" הופך 70 קג ל-154 פאונד, וזה נכון עד בתוך גרם. אבל מוחל על משלוח של 2,000 קג הוא נסחף, ומיושם על חישוב מינון זה לא מקובל. השתמש בהיוריסטיקה כדי לתפוס סדר גודל שגוי; השתמש בגורם המדויק לתשובה בפועל.
האם מקדמי המרה אלו מדויקים או מעוגלים?
מדויק, וזו עובדה מעניינת יותר ממה שזה נשמע.
מאז הסכם החצר והפאונד הבינלאומי משנת 1959, היחידות האימפריאליות הן מוגדר במונחים של מטריים האינץ' אינו נמדד מול המונה; הוא מוכרז בדיוק 0.0254 מ'. הפאונד הוא בדיוק 0.45359237 קג. הגלון האמריקאי הוא בדיוק 3.785411784 ל'. אין אי ודאות ניסיונית במספרים האלה - הם הגדרות, כמו העובדה שיש 60 שניות בדקה.
הדבר נכון גם בכל הקטגוריות:
- 1 דונם = 4046.8564224 m² (בדיוק)
- 1 psi = 6894.757293168 Pa (בדיוק, בעקבות הפאונד והאינץ')
- 1 BTU = 1055.05585262 J (הגדרת הטבלה הבינלאומית)
- 1 קוטש = 3,600,000 J (בדיוק, מכיוון שוואט הוא ג'אול לשנייה)
- 1 מייל ימי = 1852 מ' (בדיוק, בהסכם בינלאומי ב-1929)
כמה יחידות הן באמת מוסכמות ולא הגדרות, וכלים כנים אומרים זאת. "Month" היא לא כמות קבועה - הממיר משתמש ב-30 יום, כי אתה צריך לבחור משהו, ו-"year" של 365 ימים מתעלם משנים מעוברות. מאך תלוי בטמפרטורת האוויר ובלחץ; הממיר משתמש בנתון בגובה פני הים של כ-343 מ'/שניה ב-20 °C. אם אתה צריך אריתמטיקה מדויקת של תאריך במקום גורם נומינלי, השתמש ב מחשבון הבדלי תאריך, שסופר ימים קלנדריים בפועל במקום להכפיל ב-30.
ה ממיר יחידה מאחסן את הערכים המוגדרים ומעגל רק את תצוגה, לשמונה ספרות משמעותיות החשבון עצמו נעשה בדיוק כפול מלא, כך שהמרות משורשרות אינן צוברות שגיאה גלויה.
האם אני יכול להמיר פיקסלים CSS למילימטרים?
כן, וזו אחת ההמרות שאני משתמש בהן הכי הרבה כמפתח חזיתי, וזו הסיבה שהיא נמצאת בקטגוריית Length לצד היחידות הפיזיות.
מפרט ה-CSS מגדיר את פיקסל התייחסות כמו 1/96 של אינץ 'זה עושה 96 px בדיוק 25.4 ממ, או 1 px → 0.2646 ממ. זה גם אומר את הקשר בין px ו pt (הנקודה טיפוגרפית, 1/72 אינץ ') קבוע: 1 pt = 1.333... px, ו 12 pt = 16 px, וזו הסיבה 16px הוא גודל גופן הגוף ברירת המחדל בכל דפדפן - זה טקסט 12 נקודות.
האזהרה שכדאי לציין בבירור: זהו א התייחסות פיקסל, לא פיקסל התקן על תצוגה גבוהה DPI, פיקסל CSS אחד ממפה לשניים או שלושה פיקסלים פיזיים בטלפון, קנה המידה של viewport משנה את הקשר שוב. אז px → mm הוא בדיוק נכון כשאתה ממפה עיצוב הדפסה על פריסת אינטרנט (דף A4 הוא ברוחב 210 ממ, שהוא 793.7 CSS px), וזה קירוב שימושי ולא אמת פיזית כשאתה מדבר על מה שהעין שלך באמת רואה על מסך רשתית.
אם אתה בונה פריסות ואסימוני עיצוב, המרה זו בתוספת בוחר צבעים מכסה את רוב עבודת התרגום בין מעצב ' מפרט מכוון הדפסה ויישום CSS.
מקרי שימוש נפוצים
פיתוח ו-DevOps. מגבלות גודל קובץ, מכסות אחסון, גדלי מטמון, תקציבי רוחב פס ההבחנה MB/MiB היא זו שנושכת, והיא נושכת במקומות שבהם מספר שגוי דוחה בשקט בקשה חוקית במקום לזרוק שגיאה שהיית מבחין בה.
מסירה חזיתית ועיצובית. px, pt, mm ואינצ'ים כאשר עיצוב מגיע מכלי מכוון הדפסה, או כאשר אתה מייצר משהו שייצפה וגם יודפס.
בישול ומתכונים. כוסות, כפות ואונקיות בארהב לעומת גרם ומיליליטר שימו לב שהמרות הנפח כאן נהוגות בארהב - הליטר הקיסרי והגלון הם ערכים נפרדים מכיוון שחצי ליטר בבריטניה הוא 568 מל בעוד חצי ליטר אמריקאי הוא 473 מל, הבדל של 20% שהרס הרבה עוגות.
טיולים וחיי היומיום. קמ למיילים, קג לפאונד, צלזיוס לפרנהייט, ליטר לגלון הרוב הלא זוהר של תעבורת ממיר יחידות, והסיבה שהכלי כברירת מחדל לזוג הגיוני לכל קטגוריה במקום לגרום לך להגדיר אותו.
מדע והנדסה. לחץ ב-psi, בר ופסקל; אנרגיה בג'אול, קלוריות, קוטש ו-BTU; זוויות במעלות, רדיאנים וגרדיאנים בכל מקום שבו אתה נע בין נייר SI לגיליון נתונים אימפריאלי.
כושר ותזונה. קילוקלוריות (ה-" calorie" על תווית מזון היא למעשה קילוקלוריה) לג'אול, קילוגרמים לפאונד ואבנים, קילומטרים עד מיילים לחישובי קצב אם אתה ממיר אחוזים של יעד יומי ולא יחידות, ה מחשבון אחוז הוא החצי השני של זרימת העבודה הזו.
למבט רחב יותר על אילו כלי עזר מבוססי דפדפן כדאי לשמור בהישג יד, אספתי את אלה שאני משתמש בהם מדי יום מפתח האינטרנט's ערכת כלים.
מדוע ממיר מבוסס דפדפן משנה?
עבור ממיר יחידה, טיעון הפרטיות חלש יותר מאשר עבור, נניח, כלי PDF - אף אחד לא יתפשר עליך על ידי למידה שהמרת 30 סמ לאינץ'. אבל שני דברים עדיין הופכים את הביצוע בצד הלקוח לארכיטקטורה הנכונה.
הראשון הוא מהירות אין נסיעה הלוך ושוב התוצאה מתעדכנת בכל הקשה כי החשבון מתרחש במרחק של כמה מיקרו שניות, לא על פני רשת ממיר מגובה שרת שמפרק את הקלט שלך ומראה שספינר איטי יותר מאשר לעשות את הכפל בראש שלך.
השני הוא שהוא ממשיך לעבוד כששום דבר אחר לא עובד. טען את הדף פעם אחת והוא פועל במצב לא מקוון - במטוס, ברכבת, במרכז נתונים ללא WiFi של אורח, בחדר ישיבות שהרשת שלו שונאת אותך. כל כלי ב-[Toolz.dev] (/ בנוי כך בכוונה, וההיגיון מאחורי הבחירה הזו - עבור הכלים שבהם הוא באמת מגן עליך - מונח ב מדוע הנתונים שלך לעולם לא יעזבו את הדפדפן שלך.
שָׁוא
איך אני ממיר CM לאינץ'?
חלקו את מספר הסנטימטרים ב-2.54, כי אינץ' אחד מוגדר בדיוק כ-2.54 סמ. אז 30 סמ ÷ 2.54 = 11.811 אינץ', ו-100 סמ ÷ 2.54 = 39.37 אינץ'. הקשר הוא הגדרה ולא מדידה, שנקבעה בהסכם החצר והפאונד הבינלאומי משנת 1959, כך שהוא מדויק ולא משוער.
איך אני ממיר ק"ג ל-lbs?
הכפל קילוגרמים ב-2.20462262, מכיוון שפאונד אחד מוגדר בדיוק כ-0.45359237 קג. זה הופך 70 קג לשווים ל-154.32 פאונד. קיצור הדרך הנפשי - הכפל אותו והוסף 10% - מכניס אותך לשבריר קילו והוא בסדר לבדיקת שפיות, אבל השתמש בגורם המדויק לכל דבר שצריך להיות נכון, כמו משקלי משלוח או חישובי מינון.
מהי הנוסחה להמיר צלסיוס לפרנהייט?
°F = (°C × 9/5) + 32. אז 25 °C הוא 77 °F ו-100 °C הוא 212 °F. כדי להפוך אותו: °C = (°F − 32) × 5/9. הטמפרטורה צריכה גם כפל וגם היסט כי לשני הסולמות יש נקודות אפס שונות, בניגוד לאורך או משקל שבהם מספיק מכפיל בודד.
מה ההבדל בין MB ל-MIB?
מגה-בייט (MB) הוא 1,000,000 בתים, בעוד שמביבייט (MiB) הוא 1,048,576 בתים, או 1024². הפער הוא כ-4.6%, והוא גדל עם כל עלייה: גיגה-בייט וגיבי-בייט שונים ב-7.4%. יצרני כוננים מפרסמים ב-MB ו-GB עשרוניים, בעוד ש-Windows מדווח ביחידות בינאריות אך מתייג אותן GB, וזו הסיבה שכונן של 1 TB מופיע בערך כ-931 GB. שום דבר לא חסר - שתי המערכות פשוט סופרות אחרת.
כמה קילומטרים יש במייל?
מייל אחד הוא בדיוק 1.609344 קילומטרים, כך קילומטר אחד הוא בערך 0.621371 מיילים ריצה של 5 קמ היא 3.107 מיילים, 10 קמ היא 6.214 מיילים, ומרתון ב-42.195 קמ הוא 26.219 מיילים. אותו גורם של 0.621371 ממיר קמ/שעה לקמש, מכיוון ששניהם באותו יחס המוחל על מרחק לשעה.
האם מקדמי ההמרה מדויקים או משוערים?
הם הערכים המוגדרים המדויקים מהסטנדרטים הבינלאומיים: 1 in = 0.0254 m, 1 lb = 0.45359237 kg, 1 US gal = 3.785411784 L, 1 מייל ימי = 1852 m. רק התוצאה המוצגת מעוגלת, לשמונה ספרות משמעותיות, מה ששומר פלט קריא מבלי להכניס שגיאה שאי פעם תבחין. היחידות המעטות הקונבנציונליות באמת - "month" כמו 30 יום, מאך בגובה פני הים - מסומנות ככאלה.
האם אני יכול להמיר פיקסלים CSS למילימטרים?
כן. מפרט ה-CSS מגדיר את פיקסל הייחוס כ-1/96 אינץ', מה שהופך 96 px ל-25.4 ממ בדיוק. הקשר הזה הוא מה שאתה רוצה בעת מיפוי עיצוב הדפסה על פריסת אינטרנט, וזו הסיבה ש-12 pt שווה ל-16 px. זכור שהוא מתאר את פיקסל הייחוס של CSS, לא את הפיקסלים הפיזיים במסך בעל DPI גבוה, שבו פיקסל CSS אחד עשוי לכסות שניים או שלושה פיקסלים של המכשיר.
האם הנתונים שלי נשלחים לשרת כשאני ממיר יחידות?
מס 'כל המרה מחושבת ב - JavaScript בדפדפן שלך, וזו גם הסיבה שהתוצאה מתעדכנת באופן מיידי תוך כדי הקלדה ולא לאחר נסיעה הלוך ושוב ברשת שום דבר שאתה מזין לא מועבר, נרשם או מאוחסן, ולאחר שהדף נטען הממיר ממשיך לעבוד ללא חיבור לרשת כלל.



