假设我有
j
24.9999999..upto_allowed
是否有可能拥有值25.00000000..._upto_allowed_minus_one_and_then_1
或//
// ViewController.swift
// Project
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet var tableView: UITableView!
var videos:[Video] = [Video]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let model = VideoModel()
self.videos = model.getVideos()
self.tableView.dataSource = self
self.tableView.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return videos.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("BasicCell")!
//let videoTitle = videos[indexPath.row].videoTitle
//Customize the cell to display the video title
//cell.textLabel?.text = videoTitle
//Construct the video thumbnail url
//LINE A
//let videoThumbnailUrlString = "https://i.imgur.com/bYESnOo.jpg"
//LINE B
let thumbnailId = videos[indexPath.row].thumbnailId
let videoThumbnailUrlString = "/Users/User/Documents/Project/" + thumbnailId + ".JPG"
//Create a NSURL object
if let videoThumbnailUrl = NSURL(string: videoThumbnailUrlString) {
//Create a NSURLRequest object
let request = NSURLRequest(URL: videoThumbnailUrl)
//Create a NSURLSession
let session = NSURLSession.sharedSession()
//Create a datatask and pass in the request
let dataTask = session.dataTaskWithRequest(request, completionHandler: { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
//Get a reference to the imageview element of the cell
if let imageView = cell.viewWithTag(1) as? UIImageView {
if let data = data {
//Create an image object from the data and assign it into the imageView
imageView.image = UIImage(data: data)
}
}
})
})
dataTask.resume()
} else {
print("\(videoThumbnailUrlString) is an invalid path")
}
return cell
}
。我记得在某处读过这些东西但却无法正常回忆。
换句话说:
是否存在整数在转换为double时失去其精度的情况?
答案 0 :(得分:5)
对于像25
这样的小数字,你很好。对于int
为64位(具有无法在53位中表示的值)或更多的架构上的int
s的非常大(绝对)值,您将失去精度。
Double precision floating point number具有53位精度,其中最重要的位(隐式)通常为1
。
在浮点表示不是IEEE-754的平台上,答案可能略有不同。有关详细信息,请参阅C99 / C11规范的第5.2.4.2.2章
答案 1 :(得分:2)
IEEE-754 double
的有效位精度为53位。这意味着它可以存储2 ^ 53和-2 ^ 53范围内的所有有符号整数。
由于int
通常在大多数编译器/体系结构上具有32位,因此double
通常能够处理int
。
答案 2 :(得分:0)
@Mohit Jain答案对于实用编码很有用。
根据C规范,DBL_DIG
或FLT_RADIX/DBL_MANT_DIG
和INT_MAX/INT_MIN
是重要的值。
DBL_DIG
在最大十进制数字中,一个数字可以具有转换为double
并且返回肯定具有相同值的数字。 至少 10.因此像9,999,999,999这样的整数肯定可以转换为double
而不会丢失精度。可能更大的值也可以成功地往返。
真正的往返问题以超过+/-power(FLT_RADIX, DBL_MANT_DIG)
的整数值开始。 FLT_RADIX
是浮点数基础(绝大多数是2
),而DBL_MANT_DIG
是浮点数有效数字中的"数量的基数 - FLT_RADIX
数字&#34 ;例如53
与IEEE-754 binary64。
当然,int
的范围为[INT_MIN ... INT_MAX]
。范围必须至少 [-32767 ... + 32,767]。
在数学上power(FLT_RADIX, DBL_MANT_DIG) >= INT_MAX
时,没有转换问题。这适用于所有符合C的编译器。