【问题标题】:Count amount of decimal places (Swift)计算小数位数(Swift)
【发布时间】:2015-03-08 00:51:38
【问题描述】:

我想将 Double 舍入到特定的小数位数。 我希望将其四舍五入到其自身的确切长度。

例如“1.23”应该保持“1.23”,“1.230”应该改为“1.23”等等。

我正在尝试计算小数位数并用该值四舍五入 Double。

我一直在 Playground 中尝试,但不知何故 Swift 总是四舍五入并使用不需要的小数位。

这是我目前得到的结果

var someDouble:Double
var someString:String
var lenghtInt:Int



someDouble = 42.123                                 // create a float

someDouble = someDouble % 1                         // get rid of everything infront of the comma

someString = NSString(format: "%f", someDouble)     // format float into string

lenghtInt = someString.utf16Count - 2               // count lenght, substract 2 (for "0" & ".")

它告诉我有 6 个小数位,因为它在末尾加上“000”。

我该如何解决这个问题?

顺便说一句:

也许我的想法完全错误。所有这些的目的是在标签中显示浮点数/双精度数,但没有不需要的小数位。它应该适用于任何给定的数字。 希望大家给我一个答案! :)

提前谢谢你

尼克拉斯

【问题讨论】:

    标签: swift calculator rounding


    【解决方案1】:

    试试:

    let s1 = String(format: "%.19g", 1.2345) // 1.2345
    

    不确定 swift printf 是否支持 '%g'。

    编辑:19 基于双精度,显示所有(非零)数字,但最后没有得到...0001。 “%g”是浮点数“自然”表示的 printf 格式说明符。

    【讨论】:

    • %.g 确实有效!它代表什么?它正在使用 %.7g!非常感谢
    • @NiklasHein,'%g' 不代表任何东西,词源是“%e,%f,%g”,围绕“float”。 '.N' 是字段宽度,应该是输出中的字符数,但对于 '%f' &c 实际上是“打印的位数,除了不计算前导零” ...不太有用。
    • @NiklasHein,在进一步调查中,指出了“指数”、“浮动”和“一般”,但我相当肯定,至少后者是事后捏造的。
    【解决方案2】:

    试试

    let s1 = String(format: "%.2f", 1.2345) // 1.23
    let s2 = String(format: "%.2f", 1.2) // 1.20
    let s3 = String(format: "%.2f", 42.1239420000) // 42.12
    

    【讨论】:

    • 这适用于小数点后 2 位的浮点数,但不适用于其他任何浮点数。我希望它可以与任何 Float 一起使用。
    • 这就是你告诉你想要做的。减少到小数点后 2 位。
    • 这只是一个例子。即使浮点数是例如 42.1239420000,我也希望它能够工作
    • @ThomasKilian OP 说如果是1.230,它将更改为1.23。但是,如果是1.23459000,它将更改为1.23459。 OP 希望删除任何尾随的 0,但保留所有其他有效数字。
    • @ThomasKilian,我认为他们要求的是“没有尾随零”。 '%g' 有时仍然会变得丑陋,但通常不如 '%f'。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 2021-03-18
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    相关资源
    最近更新 更多