所以我有1.40
个号码,我想删除1.
,因此我可以将40
转换为二进制数。我怎样才能删除2位数?
答案 0 :(得分:2)
做你想做的唯一理智的方法是:
double x = 1.40;
int i;
snprintf(buf, sizeof buf, "%.2f", x);
i = atoi(buf+2);
这看起来很丑陋且非常低效,但其他方法的问题是在二进制浮点中1.40 不存在。相反,1.40
计算到最近的存在浮点值,该值可能稍微小于或略大于1.40。如果它更少,(int)(x*100)
之类的东西会给你139而不是140。
使用snprintf
至少可以确保在评估它时使用与显示值相同的语义。
当然,你所做的事情可能从一开始就没有意义。是1.40美元和美分(或其他货币相似)?如果是这样,你应该只是存储整数个美分开头。浮动点永远不会用于货币。
答案 1 :(得分:0)
假设1.40
存储为浮点或双精度:
double x = 1.40;
int hundreths = (int)(x * 100) % 100;
答案 2 :(得分:0)
一种方法是将输入作为浮动指针编号,然后减去整数部分并乘以100:
unsigned int v = (my_double - floor(my_double)) * 100
注意:使用这样的地板可确保即使my_double超出范围INT_MIN..INT_MAX
,计算仍然有效。
另一种方法是将输入作为字符串,跳到第一个。并转换其余的...
const char* p = strchr(my_input, '.');
if (p)
{
unsigned int v = atoi(p + 1);
// use v...
}
答案 3 :(得分:0)
我不是C程序员,但我认为我没有犯任何错误:
double y = x - floor(x);
while(y - floor(y) != 0.0){
y *= 10.0;
// y %= 10.0, which is
y -= floor(y / 10) * y
// The current digit is:
// floor(y)
// Push it to a character array or whatever you wanna do.
// The order for 1.45 is: 4 then 5, for 1.40 it's only 4
}
答案 4 :(得分:0)
我想你试图弄清楚任何数字的二进制形式,你实际上不需要拆分它。
但是如果你确实需要它,那你就去......
#include<iostream.h>
int main()
{
double i = 2.40;
unsigned int j;
float k;
j = (int) i / 1;
k = i - j ;
cout << k;
return 0;
}