说我有以下内容:
int i = 23;
float f = 3.14;
if (i == f) // do something
i将被提升为a float并将两个float数字进行比较,但是可以float代表所有int值吗?为什么不提倡既int和float一个double?
以下测试代码会产生不需要的输出,即使我使用了宽度参数:
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;
}
产量
ABC 1234.5 DEF   
ABC  14.5 DEF
如何实现这样的输出,使用哪种格式字符串?
ABC 1234.5 DEF   
ABC   14.5 DEF
在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
在Python 3.2中它出现str并repr返回相同的东西.
Python 3演示:http://ideone.com/oAKRsb
print(str(1.4*1.5))
2.0999999999999996
print(repr(1.4*1.5))
2.0999999999999996
是否存在描述变更的PEP或负责人的其他声明?
[有一些问题,但没有一个答案特别明确,有些问题与当前的C++标准已经过时了].
我的研究表明,这些是用于检查浮点值是否可以转换为整数类型的主要方法T.
if (f >= std::numeric_limits<T>::min() && f <= std::numeric_limits<T>::max() && f == (T)f)) 
使用std::fmod以提取剩余时间和测试平等为0.
使用std::remainder和测试相等为0.
第一个测试假定定义f了一个T实例的强制转换.不是真实std::int64_t到float,例如.
使用C++ 11,哪一个最好?有没有更好的办法?
我有一个关于整数和浮点范围的问题:
如果它们都具有相同的4字节大小,为什么它们具有不同的范围?
在Python中,我需要将一堆浮点数转换为十六进制.它需要填零(例如,0x00000010而不是0x10).就像http://gregstoll.dyndns.org/~gregstoll/floattohex/一样.(遗憾的是我无法在我的平台上使用外部库,因此我无法使用该网站上提供的库)
这样做最有效的方法是什么?
简单的问题:从 int(例如 100)转换为双精度数“向上或向下舍入”到下一个双精度数,还是总是舍入到最接近的一个(最小增量)?
例如static_cast<double>(100):
如果 d2 < d1 会向哪个方向投射?
额外问题:我可以以某种方式强制处理器使用特殊函数向下或向上“舍入”到双精度吗?据我所知,没有floor<double>或者ceil<double>不幸的是。
c++ floating-point rounding static-cast floating-point-conversion
我如何能转换float值char*的C语言?
如何将浮点数转换为字节序列,以便它可以保存在文件中?这种算法必须快速且高度便携.它必须允许相反的操作,反序列化.如果每个值(持久空间)只需要非常微小的多余位,那就太好了.
我想显示一个包含整个整数部分的浮点数和小数部分最多两位小数,不带尾随零.
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"
格式化具有2g当整数增加数量级时开始舍入的问题.此外,它有时会显示数字e.
格式化2f有问题,它将显示尾随零.我可以写一个删除尾随零的后处理函数,但我宁愿这样做Sprintf.
这可以通过一般方式使用Sprintf吗?
如果没有,有什么好办法呢?
c ×4
c++ ×3
python ×2
python-2.7 ×2
c++11 ×1
go ×1
int ×1
integer ×1
promotions ×1
python-3.x ×1
rounding ×1
static-cast ×1
types ×1