Swift 具有超长数字的十进制数
我希望Swift 具有超长数字的十进制数,swift,Swift,我希望Decimal将数字视为字符串,但我在测试过程中重复了小的舍入 let locale = Locale(identifier: "en_GB") let price: String? = "1535132527181273627" let decimal: Decimal? = price != nil ? Decimal(string: price!, locale: locale) : nil XCTAssertEqual(decimal, 1535132527181273627.0)
Decimal
将数字视为字符串
,但我在测试过程中重复了小的舍入
let locale = Locale(identifier: "en_GB")
let price: String? = "1535132527181273627"
let decimal: Decimal? = price != nil ? Decimal(string: price!, locale: locale) : nil
XCTAssertEqual(decimal, 1535132527181273627.0)
结果让我很困扰:
XCTASERTEQUAL失败:(“可选(1535132527181274000)”不等于(“可选(1535132527181273497.6)”)-
我尝试了你的代码,结果是: XCTASERTEQUAL失败:(“可选(1535132527181273627)”)不等于(“可选(1535132527181273497.6)”) 在MacBook Pro 2015上使用Xcode 9.4.1
我认为问题在于,
Double
只能处理15位小数。因此,无法准确表示数字1535132527181273627.0
。看看我尝试了你的代码,结果是:
XCTASERTEQUAL失败:(“可选(1535132527181273627)”)不等于(“可选(1535132527181273497.6)”)
在MacBook Pro 2015上使用Xcode 9.4.1
我认为问题在于,
Double
只能处理15位小数。因此,无法准确表示数字1535132527181273627.0
。看看,问题似乎出在测试中,而不是代码中。Swift使用Double来存储测试中的数字,但它不够长,十进制没有四舍五入,但测试中要比较的数字是四舍五入
解决方法是比较十进制
XCTAssertEqual(price, Decimal(string:"1535132527181273627"))
看来问题出在测试中,而不是代码中。Swift使用Double来存储测试中的数字,但它不够长,十进制没有四舍五入,但测试中要比较的数字是四舍五入 解决方法是比较
十进制
XCTAssertEqual(price, Decimal(string:"1535132527181273627"))
这是Swift编译器的一个设计问题。 已报告为,但已作为的副本关闭 问题是,文本
1535132527181273627.0
被解析为Double
文本(即精度有限),即使类型应该是Decimal
。使用字符串
初始化十进制
是目前唯一的解决方法
解决方案是重新设计内置协议以允许更长的数字。这是Swift编译器的设计问题。 已报告为,但已作为的副本关闭 问题是,文本
1535132527181273627.0
被解析为Double
文本(即精度有限),即使类型应该是Decimal
。使用字符串
初始化十进制
是目前唯一的解决方法
解决方案是重新设计内置协议,以允许更长的数字。的可能副本确保您了解
十进制
的功能。它当然不会将数字视为字符串
。它只是使用十进制算法。此外,它不支持任何长度的数字,它支持35位十进制数字。请确保您了解十进制
的功能。它当然不会将数字视为字符串
。它只是使用十进制算法。此外,它不支持任何长度的数字,它支持35位十进制数字。为什么不将字符串设置为非可选let locale=locale(标识符:“en_GB”)
let price=“1535132527181273627”let decimal=decimal(string:price)
@LeoDabus这只是我正在使用的规范的一部分,来自服务器的价格是可选的,所以我想在单元测试中将其与相同的可选类型进行比较。为什么不将字符串设为非可选let locale=locale(标识符:“en_GB”)
let price=“1535132527181273627”let decimal=decimal(string:price)
@LeoDabus这只是我正在使用的规范的一部分,来自服务器的价格是可选的,所以我想在单元测试中将其与相同的可选类型进行比较。