Удалять цифры после двух знаков после запятой без округления их значения в flutter?

#dart #flutter

#dart #flutter

Вопрос:

 var num1 = 10.12345678
  

Что мне следует сделать с num1, чтобы удалить цифры после двух знаков после запятой без округления их значения.
Мне нужен вывод как 10.12

 import 'package:flutter/material.dart';

void main() => runApp(MaterialApp(
      title: ' Delete digits after two decimal point ',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: MyHome(),
    ));

class MyHome extends StatefulWidget {
  @override
  _MyHomeState createState() => _MyHomeState();
}

class _MyHomeState extends State<MyHome> {
    @override
  Widget build(BuildContext context) {

    var num1 = 10.12345678;
    print(num1); // I need output as 10.12

    return Container();
  }

}
  

Комментарии:

1. что, если у вас есть 10.1299999 ? вы бы все еще хотели показать 10.12 ? честно говоря, я не могу придумать какой-либо вариант использования для этого…

2. у меня в кошельке 10.1299999 ether, я хочу показать его значение с точностью до 2 знаков после запятой

3. что вы хотите показать, если у вас есть 10.129999? 10.12 или 10.13? как вы думаете, какое значение более реалистично? 10.12? действительно?

Ответ №1:

Если вы хотите округлить число:

 var num1 = 10.12345678;
var num2 = double.parse(num1.toStringAsFixed(2)); // num2 = 10.12
  

Если вы не хотите округлять число:

Создайте этот метод:

 double getNumber(double input, {int precision = 2}) => 
  double.parse('$input'.substring(0, '$input'.indexOf('.')   precision   1));
  

Использование:

 var input = 113.39999999999999;
var output = getNumber(input, precision: 1); // 113.9
var output = getNumber(input, precision: 2); // 113.99
var output = getNumber(input, precision: 3); // 113.999
  

Комментарии:

1. toStringAsFixed округляет значение

2. Здравствуйте, это не работает должным образом для этого типа десятичных знаков попробуйте:- 113.39999999999999, 235.12560000000002, 146.44334999999998

3. @RakeshLanjewar Что именно не работает?

4. Я дал вам десятичные дроби в комментарии выше, если вы попытаетесь преобразовать их, они округлятся как 113,40

5. это не работает для значения 12.8, результат будет 12.8

Ответ №2:

Вы можете использовать intl package (https://pub.dartlang.org/packages/intl#-installing-tab —)

 var num1 = 10.12345678;
var f = new NumberFormat("###.0#", "en_US");
print(f.format(num1));
  

Ответ №3:

Некоторые ответы здесь не сработали (верхний ответ округлен, а не усечен). вот способ:

 (n * 100).truncateToDouble()/100
  

Комментарии:

1. и ответ с «val — val % 0.01» не работает с отрицательным значением.

2. Ответ правильный. Он работает как с отрицательными, так и с положительными значениями.

3. Ответ @sphinxlike неверен. Этот метод часто пропагандируется, но на самом деле он не работает в большинстве случаев. Это невозможно. С плавающей запятой просто не так.

Ответ №4:

если вы хотите округлить число, используйте это.

  double mod = pow(10.0, places);
 return ((val * mod).round().toDouble() / mod);
  

если вы просто хотите усечь, используйте это.

 return val - val % 0.01;
  

Ответ №5:

 String toFixed2DecimalPlaces(double data, {int decimalPlaces = 2}) {
  List<String> values = data.toString().split('.');
  if (values.length == 2 amp;amp; values[0] != '0' amp;amp; values[1].length >= decimalPlaces amp;amp; decimalPlaces > 0)
    return values[0]   '.'   values[1].substring(0, decimalPlaces);
  else
    return data.toString();
}
  

Ответ №6:

Вы также можете попробовать это —-> (0.2055).toStringAsFixed(2)

     var per = 0.2055;
    
    Text( "result view -> ${double.parse((per * 100).toStringAsFixed(2))}%",
            style: TextStyle(color: Colors.white, fontSize: 10)),

result value -> 
input -> 0.2055
output -> result view ->20.00 
  

Ответ №7:

Существует простое решение этой проблемы.

 double value = 17.56565656;
//as string
String formatted = value.toStringAsFixed(2); // 17.56
//as double
double formattedDouble = double.parse(formatted); //17.56
  

Комментарии:

1. 17.56565656. Фиксированная завязка (2) == 17,57. !!!

Ответ №8:

 extension NoRoundingDecimal on double {
  String toDecimalAsFixed(int toDecimal) {
    var right;
    try {
      right = this.toString().split(".")[1].padRight(toDecimal, "0").substring(0, toDecimal);
    } catch (e) {
      right = "00";
    }
    var left = this.toString().split(".")[0];

    double number = double.parse(left   "."   right);
    return number.toStringAsFixed(toDecimal);
  }
}
  

Пример1:
двойная цена = 71,999999999;
print(«число: ${price.toDecimalAsFixed(3)}»);

Result: number: 71.999

Пример2: двойная цена = 71; print(«число: ${price.toDecimalAsFixed(3)}»);

Result: number: 71.000