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

转到:使用乘数将float64转换为int

商同
2023-03-14
问题内容

我想将float64数字转换1.0031003(整数类型)。我的实现方式是简单地将float64with 1000与转换为int

package main

import "fmt"


func main() {
  var f float64 = 1.003
  fmt.Println(int(f * 1000))
}

但是,当我运行该代码时,我得到的1002不是1003。因为Go自动将1.003as
存储1.002999...在变量中。在Golang上执行此类操作的正确方法是什么?


问题答案:

转到规格:转化:

数字类型之间的转换

将浮点数转换为整数时,将舍弃小数(截断为零)。

因此,基本上,当您将浮点数转换为整数时,仅保留整数部分。

如果您只是想避免因用有限位表示而引起的错误,请在将0.5数字转换为之前添加到数字int。不需要外部库或函数调用(来自标准库)。

由于float -> int转换 不是舍入 而是 保留整数部分 ,这将为您提供所需的结果。考虑到可能更大或更小的表示形式:

1002.9999 + 0.5 = 1003.4999;     integer part: 1003
1003.0001 + 0.5 = 1003.5001;     integer part: 1003

所以只需写:

var f float64 = 1.003
fmt.Println(int(f * 1000 + 0.5))

要将其包装到函数中:

func toint(f float64) int {
    return int(f + 0.5)
}

// Using it:
fmt.Println(toint(f * 1000))

在Go Playground上尝试一下。

注意:

当您使用负数时请小心!例如,如果您的值为-1.003,则可能希望结果为-1003。但是,如果添加0.5到它:

-1002.9999 + 0.5 = -1002.4999;     integer part: -1002
-1003.0001 + 0.5 = -1002.5001;     integer part: -1002

因此,如果您有负数,则必须:

  • 减去0.5而不是加
  • 或从结果中0.5减去1

将其整合到我们的辅助html" target="_blank">函数中:

func toint(f float64) int {
    if f < 0 {
        return int(f - 0.5)
    }
    return int(f + 0.5)
}


 类似资料:
  • 问题内容: 将float转换为int时如何避免浮点错误。例如,下面的代码打印出来:当我受伤时,期望它打印出来。 问题答案: 您需要了解一些内容:是一个十进制数字(以十进制基数表示)。十进制中的是一个有限数字,正好是:。 通常,计算机以二进制表示形式存储数字。该数字不能用有限的二进制数表示:是以二进制表示的 无限 数(同样的原因为什么不能用有限的十进制数表示,它是一个无穷的序列:)。 但是Go(像其

  • 问题内容: 如何在Go中将float64转换为int?我知道该包可用于在字符串之间进行任何转换,但不能用于不是字符串的数据类型之间的转换。我知道我可以使用将任何内容转换为字符串,然后转换为所需的数据类型的方法,但是这种额外的转换似乎有些笨拙- 是否有更好的方法来做到这一点? 问题答案:

  • 问题内容: 我试图将列从数据类型转换为使用: 但出现错误: NameError:未定义名称“ int64” 专栏有人数,但其格式为:我知道如何将其更改为? 问题答案: 大熊猫 0.24+的 解决方案,用于转换缺少值的数字: ValueError:无法将非限定值(NA或inf)转换为整数 我认为您需要转换为: 样品: 如果某些S IN列需要他们取代一些(例如)通过,因为的是: 同时检查文档-缺少数据

  • 问题内容: 我正在尝试将字节切片转换为GoLang中的。我找不到在线解决此问题的方法。我见过先转换为字符串然后转换为a的建议,但这似乎不起作用,它失去了它的值,最后以零结束。 例: 而且它不起作用… 问题答案: 例如, 输出:

  • XML输入文件: XML输入文件转换为XML输出文件。将XML输入文件的firstName、middleName和lastName标签合并为XML Ouput文件的name标签,将XML输入文件的address1、address2、city、state和pincode标签合并为XML Ouput文件的address标签。 我几乎转换了代码,但我在这里与empId作斗争。我已经在XSLT文件中手动输

  • 在我的Oracle数据库中,我有存储为VARCHAR的数量值。从数据库中检索记录时,我希望将它们映射到一个POJO,其中金额值表示为double。不幸的是,我不能使用强制类型,因为在数据库中,所有内容都存储为VARCHAR,并且没有模式将列标识为包含金额值的列。 我正在查看jOOQ转换器,这似乎是我想要的。因此,我为此创建了一个jOOQ转换器: 然而,每当我想使用将数据库记录映射到我的POJO时,