Gibt in Number eine zu formatierende Zahl ein. Mit dem Regler Power10 kann die Grösse dieser Zahl in Schritten von Faktor 10 interaktiv verändert werden.
Im Ausgabe-Formular sieht man die Wirkung der Einstellungen und die verschiedenen Formatierungen. Zum Vergleich wird im Feld Native die Formatierung der Javascript Funktion toString() angezeigt. Diese Formatierung ist so, dass der String die interne Darstellung einer Number exakt wiedergibt. Mit der Javascript Funktion parseFloat() kann dieser String wieder in die entsprechende Number konvertiert werden.
Die Formtierungen werden intern mit Hilfe des NumFormatter erstellt, ein ebenfalls von mir Programmiertes JavaScript-Modul.
function CNumber() { this.Lang = 'iso'; this.Number = 1.234567890123456789; this.PowerNumber = this.Number; this.Power = 0; this.Precision = 10; } var ObjNumber = new CNumber(); NumFormatter.AltPrec = ObjNumber.Precision; ControlPanels.NewPanel( { Name: 'InputPanel', PanelFormat: 'InputLongWidth', NCols: 2, OnModelChange: ModelChangedCB, Format: 'fix', Digits: 0 } ).AddHeader( { Text: 'NumFormatter Einstellungen und Eingaben' + ControlPanels.ResetButtonR(), ColSpan: 4 } ).AddRadiobuttonField( { Name: 'Lang', ValueRef: 'ObjNumber.Lang', Items: [ { Name: 'iso' }, { Name: 'en' }, { Name: 'de' }, { Name: 'ch' } ] } ).AddRadiobuttonField( { Name: 'ExpChar', ValueRef: 'NumFormatter.ExpChar', Items: [ { Value: 'e', Text: '\'e\'' }, { Value: 'E', Text: '\'E\'' }, { Value: ' E', Text: '\' E\'' } ] } ).AddCheckboxField( { Name: 'ExpFlags', Label: 'Exp', Items: [ { Name: 'ShowExpPlus', ValueRef: 'NumFormatter.ShowExpPlus' }, { Name: 'HideZeroExp', ValueRef: 'NumFormatter.HideZeroExp' } ] } ).AddRadiobuttonField( { Name: 'AltMode', ValueRef: 'NumFormatter.AltMode', Items: [ { Name: 'sci' }, { Name: 'eng' } ] } ).AddTextField( { Name: 'MaxPrec', ValueRef: 'NumFormatter.MaxPrec' } ).AddTextField( { Name: 'MaxDigits', ValueRef: 'NumFormatter.MaxDigits' } ).AddTextField( { Name: 'AltPrec', ValueRef: 'NumFormatter.AltPrec' } ).AddSliderField( { Name: 'AltPrec', ValueRef: 'NumFormatter.AltPrec', Min: 1, Max: 16, Steps: 15 } ).AddTextField( { Name: 'Precision', ValueRef: 'ObjNumber.Precision' } ).AddSliderField( { Name: 'Precision', ValueRef: 'ObjNumber.Precision', Min: 0, Max: 16, Steps: 16 } ).AddTextField( { Name: 'Number', ValueRef: 'ObjNumber.Number', Format: '' } ).AddSliderField( { Name: 'Power10', ValueRef: 'ObjNumber.Power', Min: -25, Max: 25, Steps: 50 } ).Render(); ControlPanels.NewPanel( { Name: 'OutputPanel', PanelFormat: 'InputLongWidth', ModelRef: 'ObjNumber', ReadOnly: true, NCols: 2 } ).AddHeader( { Text: 'NumFormatter Ausgaben', ColSpan: 4 } ).AddTextField( { Name: 'Native', ValueRef: 'PowerNumber', Format: '', Mult: 0, DigitsRef: 'Precision' } ).AddTextField( { Name: 'fix', ValueRef: 'PowerNumber', Format: 'fix', DigitsRef: 'Precision' } ).AddTextField( { Name: 'std', ValueRef: 'PowerNumber', Format: 'std', DigitsRef: 'Precision' } ).AddTextField( { Name: 'fix0', ValueRef: 'PowerNumber', Format: 'fix0', DigitsRef: 'Precision' } ).AddTextField( { Name: 'prec', ValueRef: 'PowerNumber', Format: 'prec', DigitsRef: 'Precision' } ).AddTextField( { Name: 'weak', ValueRef: 'PowerNumber', Format: 'weak', DigitsRef: 'Precision' } ).AddTextField( { Name: 'eng', ValueRef: 'PowerNumber', Format: 'eng', DigitsRef: 'Precision' } ).AddTextField( { Name: 'weak0', ValueRef: 'PowerNumber', Format: 'weak0', DigitsRef: 'Precision' } ).AddTextField( { Name: 'sci', ValueRef: 'PowerNumber', Format: 'sci', DigitsRef: 'Precision' } ).AddTextField( { Name: 'unit', ValueRef: 'PowerNumber', Format: 'unit', Units: 'U', DigitsRef: 'Precision' } ).Render(); function ModelChangedCB( ) { NumFormatter.SetLang( ObjNumber.Lang ); ObjNumber.PowerNumber = ObjNumber.Number * Math.pow( 10, ObjNumber.Power ); ControlPanels.Invalidate( 'OutputPanel' ); ControlPanels.Update(); } function Reset( ) { ControlPanels.Reset( 'InputPanel', true ); }