当前位置: 首页 > 面试题库 >

如何在NSDecimalNumber中存储1.66

许丁雷
2023-03-14
问题内容

我知道float或double不适合存储货币和数量等十进制数字。我正在尝试使用NSDecimalNumber。这是我在Swift操场上的代码。

let number:NSDecimalNumber = 1.66
let text:String = String(describing: number)
NSLog(text)

控制台输出为1.6599999999999995904

如何将十进制数1.66的确切值存储在变量中?


问题答案:

let number:NSDecimalNumber = 1.66

右侧是一个浮点数,不能精确表示值“ 1.66”。一种选择是从字符串创建十进制数字:

let number = NSDecimalNumber(string: "1.66")
print(number) // 1.66

另一种选择是使用算术:

let number = NSDecimalNumber(value: 166).dividing(by: 100)
print(number) // 1.66

在Swift 3中,您可以考虑使用“覆盖值类型” Decimal代替,例如

let num = Decimal(166)/Decimal(100)
print(num) // 1.66

另一个选择:

let num = Decimal(sign: .plus, exponent: -2, significand: 166)
print(num) // 1.66

附录:

Swift论坛中的相关讨论:

  • 通过文字精确的NSDecimalNumber
  • ExpressFlyByFractionLiteral

相关的错误报告:

  • SR-3317用于十进制文字的文字协议应支持精确的十进制精度,以与
  • SR-920为文字可转换类型重新设计了内置的编译器协议。


 类似资料:
  • 问题内容: 我找不到任何资源,我一直在尝试各种方法,但是没有任何效果。 根据Apple的文档,您对NSDecimalNumber进行如下舍入: 它接受一个NSDecimalNumberBehavior,我不确定如何操作,因为(1)无法将其初始化为变量并更改了属性,并且(2)根据文档所述的roundingMode()方法没有任何参数,但Xcode会为“ self”填充参数空间。 我对此完全迷失了。回

  • 问题内容: 这星期我们在办公室进行了一场健康的辩论。我们正在创建一个Db来存储代理信息,在大多数情况下,除了应该如何存储IP之外,我们还制定了模式。一个阵营想要使用4个smallint,每个八位位组一个,另一个希望使用1个大int INET_ATON。 这些表将非常庞大,因此性能至关重要。我处于中间位置,因为我通常在世界中使用MS SQL和4个小整数。我对这种类型的IP存储量没有足够的经验。 我们

  • 问题内容: 我有一个具有数据类型joda.money属性的类。如何将这个属性映射到mysql中。 我的课是: @Table(name =“ products”)公共类Product(){@Column(name =“ name”)字符串名称;@Column(name =“ money”)金钱金钱;} 我正在使用Spring Hibernate 谁能说出如何将此模型存储到mysql中? 问题答案:

  • 问题内容: 如何在免费版本的MySQL中存储Unicode? 在SQL Server中似乎没有类型。MySQL不支持Unicode吗?我尝试使用,但是那也不起作用。 问题答案: 您需要为表选择一个 字符集。然后,文本和备注字段将自动存储在UTF-8中。MySQL 6中提供了对UTF-16的支持。

  • 问题内容: 我尝试将DECIMAL与(2,2)一起使用,但不允许我使用。 我只想存储一个数字,例如7.50或10.50。我需要将两个数字都保留在小数点后,但是当我刷新数据库时,它将值重置为0.99。有什么建议么? 问题答案: 声明的第一位数字是 总数 。您可能想要使用。这允许小数点前最多两位数,小数点后两位数。 文档:https : //dev.mysql.com/doc/refman/5.7/e

  • 问题内容: 我在MySQL中有两个表。表人具有以下列: 该列可以包含null或字符串数​​组,例如(’apple’,’orange’,’banana’)或(’strawberry’)等。第二个表是Table Fruit,具有以下三列: 那么,我应该如何设计第一个表中的列,以便它可以容纳从第二个表中的列获取值的字符串数组?由于MySQL中没有数组数据类型,该怎么办? 问题答案: 正确的方法是在查询中