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

在Swift中获取双精度的小数部分

顾高扬
2023-03-14
问题内容

我正在尝试快速分隔双精度数的十进制和整数部分。我尝试了多种方法,但是它们都遇到了相同的问题…

let x:Double = 1234.5678
let n1:Double = x % 1.0           // n1 = 0.567800000000034
let n2:Double = x - 1234.0        // same result
let n3:Double = modf(x, &integer) // same result

有没有一种方法可以获取0.5678而不是0.567800000000034,而无需将数字转换为字符串?


问题答案:

无需将其转换为字符串,您可以将舍入到小数点后的位数,如下所示:

let x:Double = 1234.5678
let numberOfPlaces:Double = 4.0
let powerOfTen:Double = pow(10.0, numberOfPlaces)
let targetedDecimalPlaces:Double = round((x % 1.0) * powerOfTen) / powerOfTen

您的输出将是

0.5678



 类似资料:
  • 问题内容: 是否有一种方法(也许使用Google收藏夹)来获取a的最小值? 以传统方式,我将不得不根据值对地图进行排序,并选择第一个/最后一个。 问题答案: 您可以为此使用标准。 更新 :由于您也需要密钥,因此,我不会在Google API中看到任何方法,因为a 不是a 。该也不是真正有用的,因为你只知道在实际的结果 结束 迭代。 那么,最直接的解决方案是: (nullcheck在左侧)

  • 我想用一个小数点和一个小数位的格式将任何双精度四舍五入为双精度,这样29575.347434将是2.3。 我试着用decimalFormat做这个,但当我试着我只得到了一个29575.3格式的字符串,带有一个,我不知道如何在保留值为双精度的同时去掉所有小数点。

  • 问题内容: 使用double时,如何使用模数运算符处理Java的怪异行为? 例如,你所期望的结果是(事实上,谷歌说,我不是要疯了),但是当我在Java中,我得到运行它。 我了解这是Java存储和处理方式加倍的结果,但是有没有解决的方法? 问题答案: 如果需要精确的结果,请使用精确的类型: 为什么是3.8000 … 003?因为Java使用FPU来计算结果。3.9不可能以IEEE双精度表示法精确存储

  • 问题内容: java中双值的乘法运算符的保证精度是多少? 例如,2.2 * 100是220.00000000000003,但是220是双精度数。220.00000000000003是220之后的下一个两倍。 问题答案: 乘法工作正常,但不能精确表示为双精度。最接近的双打是: 2.199999999999999733(0x4001999999999999) 2.200000000000000177(

  • 标题中说了一切。我想转换字符串中的双2小数。 我尝试了夸克斯的例子: 这是我的模板 但它总是导致NOT_FOUND。 唯一的方法是把: 并更改我的模板: 有更好的办法吗?我使用了quarkus rest easy qute和quarkus qute扩展,两者都是相同的。

  • 问题内容: 我有一个必须在用户界面上显示的双精度值。现在的条件是double的十进制值= 0,例如。-14.0在这种情况下,我必须仅在UI上显示14。另外,此处字符的最大限制为5。 例如:-12.34整数值不能大于2位,所以double的十进制值也不能大于2位。 最好的方法是什么? 问题答案: 你可以做 检查是否整体。