It would not be very misleading to say that the Real structure contains all of the corresponding real equivalents of the integer functions from the Int structure. In addition to these, it provides conversions to and from integers. For the former we have Real.trunc, which truncates; Real.round, which rounds up; Real.floor which returns the greatest integer less than its argument; and Real.ceil, which returns the least integer greater than its argument. For the latter we have Real.fromInt, which we have already seen. One function which is necessarily a little more complicated than the integer equivalent is the Real.fmt function which allows the programmer to select between scientific and fixed-point notation or to allow the more appropriate format to be used for the value being formatted. In addition to this a number may be specified; it will default to six for scientific or fixed-point notation and twelve otherwise. The fine distinction between the import of the numbers is that it specifies decimal places for scientific and fixed-point notation and significant digits otherwise. Functions cannot vary the number of arguments which they take so once again the option type is used to signify the number of required digits. Here are some examples of the use of this function. Note that the parentheses are needed in all cases.
|Real.fmt (StringCvt.FIX NONE) 3.1415||=||"3.141500"|
|Real.fmt (StringCvt.SCI NONE) 3.1415||=||"3.141500E00"|
|Real.fmt (StringCvt.GEN NONE) 3.1415||=||"3.1415"|
|Real.fmt (StringCvt.FIX (SOME 3)) 3.1415||=||"3.142"|
|Real.fmt (StringCvt.SCI (SOME 3)) 3.1415||=||"3.142E00"|
|Real.fmt (StringCvt.GEN (SOME 3)) 3.1415||=||"3.14"|