舍入最后2位数的双倍

时间:2015-12-14 12:32:55

标签: c++ double rounding

我有一个看起来像这样的人:

0.04251789

看起来应该是这样的:

0.04251700

无论最后两位数是什么,它们都应被00&替换; 重要的是最后两位数字不会丢失,而是由00&替换。

所以这个:

0.042517

会错的。

实现这一目标的最快方法是什么?

3 个答案:

答案 0 :(得分:3)

  

我有一个看起来像这样的人:

     

0.04251789

     

看起来应该是这样的:

     

0.04251700

您想要向下舍入到最近的 Upload.upload({ url: "https://api.cloudinary.com/v1_1/" + credrentials["cloud_name"] + "/upload", fields: { cloud_name: credrentials["cloud_name"], api_key: credrentials["api_key"], signature: credrentials["signature"], timestamp: credrentials["timestamp"], //file: 'http://res.cloudinary.com/justask/image/upload/v1450094392/kfvu2lnh4pidjfb0b3vz.jpg' }, file: file }).progress(function (e) { console.log("progress"); }).success(function (data, status, headers, config) { console.log("success"); $rootScope.photos = $rootScope.photos || []; data.context = {custom: {photo: $scope.title}}; file.result = data; $rootScope.photos.push(data); }).error(function (data, status, headers, config) { file.result = data; }); 。这可以这样做:

1.0 / 1000000
  

所以这个:

     

0.042517

     

会错的。

double d = 0.04251789; double rounded = std::floor(f * 1000000) / 1000000; 转换为字符串时,只需指定正确的精度即可。你想要8个数字,所以:

double
  

转换为字符串不是一种选择。

这与您的要求相矛盾,即该数字必须具有尾随零。尾随(和前导)零只在数字的文本表示中有意义。

答案 1 :(得分:2)

所以这里是一个c-way,它不是最好的,但我应该做你想要的。

int main( void ) {
    double number = 0.04251789;
    char buffer[10];
    snprintf(buffer, sizeof(buffer), "%g", number);
    buffer[8] = '0';
    buffer[9] = '0';
    std::cout << "Converted Number: " << buffer << std::endl;
}

输出应为Converted Number: 0.04251700

我也用字符串尝试过,但他似乎削减了一些数字,我不知道如何禁用它。但是如果你想尝试一下c ++风格,可以试试std::to_string()方法。

答案 2 :(得分:1)

因为它需要是字符串,否则你将无法显示零,c解决方案可能是:

char temp[128];
memset(temp,'\0',sizeof(temp));
sprintf(temp,"%10.8f",0.04251789);
temp[strlen(temp)-1]='0';
temp[strlen(temp)-2]='0';
printf(temp);