Formatted numeric output: Difference between revisions

From Rosetta Code
Content added Content deleted
(→‎[[JavaScript]]: changed typo (m to n), improved spacing, added semicolons)
(Added Toka)
Line 105: Line 105:
set number 7.342
set number 7.342
format "%08.3f" $number
format "%08.3f" $number

==[[Toka]]==
[[Category:Toka]]

needs values
value n
123 to n
2 import printf
" %08d" n printf

Revision as of 04:40, 18 May 2007

Task
Formatted numeric output
You are encouraged to solve this task according to the task description, using any language you may know.

Express a number in decimal as a fixed-length string with leading zeros.

For example, the number 7.125 could be expressed as "00007.125".

Ada

with Ada.Text_Io.Editing; use Ada.Text_Io.Editing;
with Ada.Text_Io; use Ada.Text_Io;

procedure Zero_Fill is
   Pic_String: String := "<999999.99>";
   Pic : Picture := To_Picture(Pic_String);
   type Money is delta 0.01 digits 8;
   package Money_Output is new Decimal_Output(Money);
   use Money_Output;
   
   Value : Money := 37.25;
begin
   Put(Item => Value, Pic => Pic);
end Zero_Fill;

The output of this program is

000037.25 

C

void printit(int val)
{
    printf ("%08d", val);    // Prints 8 digits with leading zeros
}

Forth

Forth has a rather rich set of number formatting words, which makes formatted output very flexible but sometime cumbersome.

Here one way to generate the required output. Note that the number generated is NOT truncated to the field width. If you wish to truncate the number, remove #s and 1- from the definition. (The 1- is necessary because #s always generates at least one digit, even if it's zero.)

\ format 'n' digits of the double word 'd'
: #n ( d n -- d )  0 ?do # loop ;

\ ud.0 prints an unsigned double
: ud.0 ( d n -- )  <# 1- #n #s #> type ;

\ d.0 prints a signed double
: d.0 ( d n -- )  >r tuck dabs <# r> 1- #n #s rot sign #> type ;

Usage example:

Type:    123 s>d  8 ud.0
Result:  00000123 ok
Type:    -123 s>d 8 d.0
Result:  -00000123 ok

IDL

n = 7.125
print, n, format='(f08.3)'
;==> 0007.125

JavaScript

var n = 123;
var str = ("00000" + n).slice(-5);
alert(str);
//or, put in browser URL: javascript:n=123;alert(("00000"+n).slice(-5));

Perl

Interpreter: Perl v5.x

my $num = 123.45
my $pad = '0' x (5 - length(int($num))) . $num;
# $pad is now 00123.45

Python

#tested in Python 2.4.1
n = 123
str = "%05d" % n  #5 places wide, leading zeros
print n, str
#output: 123 00123

SQL

--Tested MS SQL 2005
declare @n int
select @n=123
select substring(convert(char(5), 10000+@n),2,4) as FourDigits

set @n=5
print "TwoDigits: " + substring(convert(char(3), 100+@n),2,2)
--Output: 05

Tcl

set number 7.342
format "%08.3f" $number

Toka

needs values
value n
123 to n

2 import printf
" %08d" n printf