标签: floating-point-conversion

当float不能表示所有int值时,为什么C++将int提升为float?

说我有以下内容:

int i = 23;
float f = 3.14;
if (i == f) // do something
Run Code Online (Sandbox Code Playgroud)

i将被提升为a float并将两个float数字进行比较,但是可以float代表所有int值吗?为什么不提倡既intfloat一个double

c++ int promotions types floating-point-conversion

67
推荐指数
6
解决办法
8136
查看次数

printf格式浮点数与填充

以下测试代码会产生不需要的输出,即使我使用了宽度参数:

int main(int , char* [])
{
    float test = 1234.5f;
    float test2 = 14.5f;

    printf("ABC %5.1f DEF\n", test);
    printf("ABC %5.1f DEF\n", test2);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

产量

ABC 1234.5 DEF   
ABC  14.5 DEF
Run Code Online (Sandbox Code Playgroud)

如何实现这样的输出,使用哪种格式字符串?

ABC 1234.5 DEF   
ABC   14.5 DEF
Run Code Online (Sandbox Code Playgroud)

c floating-point floating-point-conversion

25
推荐指数
2
解决办法
3万
查看次数

为什么str(float)在Python 3中返回的数字比Python 2多?

在Python 2.7中,repra float返回最接近17位数的最接近的十进制数; 这足够精确,可以唯一地标识每个可能的IEEE浮点值.str一个float类似的工作,除了它将结果限制为12位数; 对于大多数用途,这是一个更合理的结果,并使您免受二进制和十进制表示之间的细微差别.

Python 2演示:http://ideone.com/OKJtxv

print str(1.4*1.5)
2.1
print repr(1.4*1.5)
2.0999999999999996
Run Code Online (Sandbox Code Playgroud)

在Python 3.2中它出现strrepr返回相同的东西.

Python 3演示:http://ideone.com/oAKRsb

print(str(1.4*1.5))
2.0999999999999996
print(repr(1.4*1.5))
2.0999999999999996
Run Code Online (Sandbox Code Playgroud)

是否存在描述变更的PEP或负责人的其他声明?

python python-2.7 python-3.x floating-point-conversion

23
推荐指数
1
解决办法
1604
查看次数

检查浮点是否为整数的最佳方法

[有一些问题,但没有一个答案特别明确,有些问题与当前的C++标准已经过时了].

我的研究表明,这些是用于检查浮点值是否可以转换为整数类型的主要方法T.

  1. if (f >= std::numeric_limits<T>::min() && f <= std::numeric_limits<T>::max() && f == (T)f))

  2. 使用std::fmod以提取剩余时间和测试平等为0.

  3. 使用std::remainder和测试相等为0.

第一个测试假定定义f了一个T实例的强制转换.不是真实std::int64_tfloat,例如.

使用C++ 11,哪一个最好?有没有更好的办法?

c++ floating-point c++11 floating-point-conversion

22
推荐指数
2
解决办法
3699
查看次数

int和float的大小

我有一个关于整数和浮点范围的问题:

如果它们都具有相同的4字节大小,为什么它们具有不同的范围?

c floating-point integer floating-point-conversion

17
推荐指数
3
解决办法
4万
查看次数

如何将浮点数转换为十六进制

在Python中,我需要将一堆浮点数转换为十六进制.它需要填零(例如,0x00000010而不是0x10).就像http://gregstoll.dyndns.org/~gregstoll/floattohex/一样.(遗憾的是我无法在我的平台上使用外部库,因此我无法使用该网站上提供的库)

这样做最有效的方法是什么?

python python-2.7 floating-point-conversion

16
推荐指数
4
解决办法
3万
查看次数

int 到 double 的转换是否会向上舍入、向下舍入或到最接近的双精度?

简单的问题:从 int(例如 100)转换为双精度数“向上或向下舍入”到下一个双精度数,还是总是舍入到最接近的一个(最小增量)?

例如static_cast<double>(100)

从 int 转换为 double

如果 d2 < d1 会向哪个方向投射?

额外问题:我可以以某种方式强制处理器使用特殊函数向下或向上“舍入”到双精度吗?据我所知,没有floor<double>或者ceil<double>不幸的是。

c++ floating-point rounding static-cast floating-point-conversion

16
推荐指数
1
解决办法
1319
查看次数

14
推荐指数
4
解决办法
13万
查看次数

C - 浮点数的序列化(浮点数,双精度数)

如何将浮点数转换为字节序列,以便它可以保存在文件中?这种算法必须快速且高度便携.它必须允许相反的操作,反序列化.如果每个值(持久空间)只需要非常微小的多余位,那就太好了.

c floating-point floating-point-conversion

13
推荐指数
1
解决办法
1万
查看次数

将float格式化为n个小数位并且不包含尾随零

我想显示一个包含整个整数部分的浮点数和小数部分最多两位小数,不带尾随零.

http://play.golang.org/p/mAdQl6erWX:

// Desired output: 
// "1.9"
// "10.9"
// "100.9"

fmt.Println("2g:")
fmt.Println(fmt.Sprintf("%.2g", 1.900)) // outputs "1.9"
fmt.Println(fmt.Sprintf("%.2g", 10.900)) // outputs "11"
fmt.Println(fmt.Sprintf("%.2g", 100.900)) // outputs "1e+02"

fmt.Println("\n2f:")
fmt.Println(fmt.Sprintf("%.2f", 1.900)) // outputs "1.90"
fmt.Println(fmt.Sprintf("%.2f", 10.900)) // outputs "10.90"
fmt.Println(fmt.Sprintf("%.2f", 100.900)) // outputs "100.90"
Run Code Online (Sandbox Code Playgroud)

格式化具有2g当整数增加数量级时开始舍入的问题.此外,它有时会显示数字e.

格式化2f有问题,它将显示尾随零.我可以写一个删除尾随零的后处理函数,但我宁愿这样做Sprintf.

这可以通过一般方式使用Sprintf吗?
如果没有,有什么好办法呢?

go floating-point-conversion

13
推荐指数
3
解决办法
8366
查看次数