 {
     var calculatorString: String
     {
-        return _calculatorString(self)
+        let numString = NSString(format: "%0.\(DECIMAL_PRECISION)f", self) // NOTE: `%f` will never print exponent
+        return _calculatorString(numString, rtrims: true)
     }
 }
 

    }
    // add commas for integer-part
    else {
        
        string = NSString(format: "%0.\(DECIMAL_PRECISION)f", num) // NOTE: `%f` will never print exponent
        
        // split by `.Point`
        let splittedStrings = string.componentsSeparatedByString(Calculator.Key.Point.rawValue)
        if let integerString = splittedStrings.first as? String {
            
            var integerCharacters = Array(integerString)
            
            // insert commas
            for var i = countElements(integerCharacters) - 3; i > 0; i -= 3 {
                integerCharacters.insert(Character(COMMA_SEPARATOR), atIndex: i)
            }
            
            string = String(integerCharacters)
            
            if splittedStrings.count == 2 {
                // append `.Point` & decimal-part
                string = string + (Calculator.Key.Point.rawValue as String) + (splittedStrings.last! as String)
            }
        }
        
        var nonNumberCount = 0
        for char in string as String {
            if char == Character(COMMA_SEPARATOR) || char == Character(Calculator.Key.Point.rawValue) {
                nonNumberCount++
            }
        }
        
        // limit to MAX_DIGIT_FOR_NONEXPONENT considering non-number characters
        if string.length > MAX_DIGIT_FOR_NONEXPONENT + nonNumberCount {
            string = string.substringToIndex(MAX_DIGIT_FOR_NONEXPONENT + nonNumberCount)
        }
        
        string = _rtrimFloatString(string)
    }
    
    return string
}

/// e.g. `123.000` -> `123`
func _rtrimFloatString(var string: NSString) -> String
{
    // trim floating zeros, e.g. `123.000` -> `123.`

            //
            // NOTE: 
            // Due to rounding of floating-point,
            // `NSString(format:)` (via `doubleValue.calculatorString`) is not capable of
            // printing very long decimal value e.g. `9.999...` as-is 
            // (expecting "9.999..." but often returns "10"),
            // even when higher decimal-precision is given.
            //
            string = _rtrimFloatString(significand.calculatorString)
            if string == "10" {
                string = "1"
                exponent++
