2017-03-15 16:48:50 yjw1007020425 阅读数 1066

四舍六入五单双的官方结束如下:“四舍六入五单双”的法则:即看要保留的有效数字后一位数字,如果大于5,向前进一位,小于4则舍去.等于5则看5后,如5后不全为0,则进一位.5后全为零则看5前,若为奇,则进1,若为偶,则舍去.
但是swift中似乎并不是这样,我举个例子说明:

class func doubleToString(value:Double,point:Int)->String{
      return   NSString(format: "%.\(point)f", value) as String
    }

print(Common.doubleToString(12.6225, point: 3)) //12.623
print(Common.doubleToString(12.6215, point: 3)) //12.621
注释后面跟着的就是打印值,和定义的规则似乎有出入。

那么,还有一点很奇怪的现象就是:
var sum:Double = 0
下面的值分别是:13.51,11.51,12.51,13.51,因为需要统一保留三位小数,所以我丧心病狂的使用了上面的方法把这些数据转成了“13.510”,“11.510”,“12.510”,“13.510”
然后再使用sum = sum + Double(v)! 求和
再然后 let s = Common.doubleToString(sum/4.0, point: 3)
无数次循环下,答案居然出现了12.623 /12.622交替随机出现的情况。
打印su m/4.0得到的答案是12.6225,直接打印Common.doubleToString(12.6225, point: 3)打印出的结果始终都是12.623,直接打印Common.doubleToString(50.49/4.0, point: 3)打印出的结果也是依然坚持12.623,并无任何随机情况出现。于是,所以我开始推测,sum和50.49既然有不同的结果,就说明两个值并不是完全相等,那么最可能的差距在哪里,就是小数位保留。
于是采用如下方式:

let st = Common.doubleToString(sum, point: 3)
let s = Common.doubleToString(Double(st)!/Double(c), point: 3)

果然答案始终是12.623,再无任何随机现象出现。
我没办法解释这个事情,先记下来,以后有了新的领悟再来修改吧。

2017-10-30 21:50:14 dafei1631994 阅读数 178

example:


func getGasPrices()->(Double, Double, Double){

    return (4.54,34.35,45.65)

}

print(getGasPrices())


result:

(4.54, 34.350000000000001, 45.649999999999999)


这是说用Print函数打印double字符的时候,可能会带出来多余的小数点尾数

2015-06-08 14:03:28 xingql 阅读数 3096

在Swift中将String类型的字符串转换成floate或double的若干方法:
1._bridgeToObjectiveC()

let version: String = UIDevice.currentDevice().systemVersion
let versionFloat = version._bridgeToObjectiveC().floatValue
if versionFloat < 8.0 {
    cell.textLabel?.font = UIFont.preferredFontForTextStyle(UIFontTextStyleHeadline)
}

2.as NSString

let version: String = UIDevice.currentDevice().systemVersion
let versionFloat = (version as NSString).floatValue        // -> 8.1

3.CFStringGetDoubleValue()

let version: String = UIDevice.currentDevice().systemVersion
let versionFloat = CFStringGetDoubleValue(version)
println("\(versionFloat)")     // -> 8.1

4.atof()/strtod()
strtod()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束时(‘\0’)才结束转换,并将结果返回。若endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr传回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分。如123.456或123e-2。

let str = "0xff"
atof(str)                      // -> 255.0
strtod(str, nil)               // -> 255.0
atof("123.4567fubar")          // -> 123.4567

注:atof()和atof()可以接受进制数字,如上所示

5.NSNumberFormatter

var formatter = NSNumberFormatter()

let valueStr = "1234.123"
let oldNumber = formatter.numberFromString(valueStr)

formatter.groupingSeparator = " "
formatter.decimalSeparator = "|"
formatter.numberStyle = .DecimalStyle
formatter.formatterBehavior = .BehaviorDefault

let numberStr = formatter.stringFromNumber(oldNumber!)    
println("\(numberStr!)")     //1 234|123
2017-05-11 11:01:45 m0_38076563 阅读数 28457

  


学java的。。。使劲找 Integer.valueOf(""),其他各种方法试啊,就是没想到swift强大的构造方法。。。。


let value = Int("123455")!

let value3 = Int.init("23456")!


let value2 = Double("123.4")!



print(value,"-----",value2,"--------",value3)



打印

123455 ----- 123.4 -------- 23456


2019-12-20 18:44:05 Xu_JL1997 阅读数 13

在网上查找了很多方法,可能是版本的原因,相关的 String 方法都没有了,后来在 Double 的文件中找到了一个可用的属性:

let number = 9.9
let str = number.description

实际上 Double 的 description 属性就已经是该数值的 String 形式。

可以查看一下源代码:

extension Double : CustomStringConvertible {

    /// A textual representation of the value.
    public var description: String { get }
}

同理,其他数值类型也能找到这个属性。

swift switch Double

阅读数 468

swift

阅读数 119

没有更多推荐了,返回首页